Objective-C基礎語法規則教程

Objective-C基礎語法規則教程


簡介

Objective-C是一種簡單的面向對象的計算機語言。Oobjective-C擴展了標準的ANSI C語言。類的語法和設計主要是基於Smalltalk,最先的面向對象編程語言之一。objective-c

Objective-C:C的超集

Objective-C是ANSI版本C編程語言的超集,支持C的基本語法。在C代碼中,你定義頭文件和源代碼文件,從代碼實現細節分離公共聲明。Objective-C頭文件使用的文件名有: 編程

擴展名 內容類型
.h 頭文件。包含類、類型、函數和常量的聲明
.m 源代碼文件。源代碼的擴展名,能夠包含Objective-C和C代碼
.mm 源代碼文件。帶有這種擴展名的源代碼文件,除了能夠包含Objective-C和C代碼之外還能夠包含C++代碼。僅在你的Objective-C代碼中確實須要使用C++類或者特性的時候才用這種擴展名。

如同全部其餘的面嚮對象語言,類是Objective-C用來封裝數據,以及操做數據的行爲的基礎結構。對象就是類的運行期間實例,它包含了類聲明的實例變量本身的內存拷貝,以及類成員的指針。Objective-C的類規格說明包含了兩個部分:接口和實現。接口部分包含了類聲明和實例變量的定義,以及類相關的方法。實現部分包含了類方法的實際代碼。編程語言

[@interface](https://my.oschina.net/u/996807) MyClass:NSObject {
	//定義成員變量
	int count;
	id data;
	NSString* name;
}
//方法的聲明
-(id)initWithString:(NSString*)aName;
+(MyCalss*)createMyClassWithString(NSString*)aName;
[@end](https://my.oschina.net/u/567204)

上面的程序定義了一個名爲MyClass並繼承自NSObject的類。在OC的語言規則中,類的聲明老是以**@interface開始到@end**結束。函數

方法

Objective-C中的類能夠聲明兩種類型的方法:實例方法和類方法。實例方法就是一個方法,它在類的一個具體實例的範圍內執行。也就是說,在你調用一個實例方法前,你必須首先建立類的一個實例。而類方法,比較起來,不須要你建立一個實例。atom

-(void) insertObject:(id)anObject atIndex:(NSUInteger)index

-:方法類型標識符,方法的聲明必須以方法標識符開始; void:返回值的類型; insertObject:與anIndex同樣爲方法標識關鍵字; id:與NSUInteger爲參數類型; anObject:與index同爲參數名。.net

屬性

屬性是用來代替聲明存取方法的便捷方式。他們僅僅是定義方法訪問已有的實例變量的速記方式而已。屬性聲明應該放在類接口的方法聲明那裏。基本的定義使用@property編譯選項,緊跟着類型信息和屬性的名字。設計

@property BOOL flag;
@property (copy) NSString* nameObject;//在賦值過程當中複製對象
@property (readOnly) UIVIew* rootView;//建立一個getter方法

使用屬性的好處就是可使用點語法訪問它們。屬性還有copy, retain, readwrite, readonly等屬性。換而言之,Objective-C中引入的屬性,以確保類的實例變量能夠在類的外部訪問。指針

myObject.flag=YES;//myObject爲類方法名
CGRect myViewFrame=myObject.rootView.Frame;

語法規則

@interface Circle:NSObject   //爲Circle類定義接口;NSObject表示是父類。
{
//成員變量
 ShapeColor fillColor;
 ShapeRect bounds;
}
//如下是方法聲明
-(void) setFillColor: (ShapeColor) fillColor; //冒號前面的依次是方法標識符、返回值類型和方法名;冒號後面的內容依次爲參數類型和參數名。
-(void) setBounds:(ShapeRect) bounds;
-(void) draw;
@end     //結束聲明

注意:當方法的標識符爲+是表示靜態函數,-則爲通常函數。code

類實現

類的實現使用**@implementation**聲明。對象

@implementation Circle
-(void) setFillColor: (ShapeColor) c
{
   fillColor=c;
}
-(void) draw
{
    NSLog(@」drawing a circle at(%d %d %d %d) in %@」, bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillName));
}
@end

上面的實例中,咱們一次實現了類Circle的setFillColor和draw方法。另外咱們須要注意到的OC語法格式有:

  1. 雙引號的前面的@表示這雙引號中的字符串應該做爲cocoa的NSString元素;
  2. %@表示輸出爲NSString數據類型,%d爲整型;
  3. NSlog()和printf()相似,從控制檯輸出信息;
  4. 代碼的最後依然須要以@end結尾;
  5. 若是咱們須要訪問fillColor成員變量可使用Self.fillColor方法。

對象初始化

兩種建立新對象的方法:

  • [類名 new]
  • [[類名 alloc] init]

這兩種方法是等價的,但cocoa的慣例是使用後者。alloc在爲對象分配空間的同時,將這塊內存初始化爲0;

調用寫好的類和類函數

//建立新對象,使用缺省初始化函數
Bank *bankDefault = [[Bank alloc] init];
//調用方法:
[bank addAmount: 1];
[bank print];
// 釋放對象:
[bankDefault free];

一個完整的實例

//引入頭文件
 #import <Foundation/Foundation.h>
 //定義繼承自NSObject的Box類
@interface Box:NSObject
{
    double length;   
    double breadth;  
    double height;   
}
@property(nonatomic, readwrite) double height; // 屬性
-(double) volume; //類方法
@end //類定義結束

//類實現
@implementation Box
@synthesize height; //建立屬性的訪問器
-(id)init
{
   self = [super init];
   length = 1.0;
   breadth = 1.0;
   return self;
}

-(double) volume
{
   return length*breadth*height;
}
@end //類實現結束

//主函數
int main( )
{    
   Box *box1 = [[Box alloc]init];    
   Box *box2 = [[Box alloc]init];  //建立Box類對象並初始化
   double volume = 0.0;  
   // 對類的屬性賦值
   box1.height = 5.0; 
   box2.height = 10.0;
   //box1
   volume = [box1 volume];
   NSLog(@"Volume of Box1 : %f", volume);
   // box2
   volume = [box2 volume];
   NSLog(@"Volume of Box2 : %f", volume);
   return 0;
}

運行結果以下:

2016-09-18 12:26:45.364523 OC[2035:85558] Volume of Box1 : 5.000000
2016-09-18 12:26:45.366837 OC[2035:85558] Volume of Box2 : 10.000000

經過上面的實例咱們須要知道的是: Objective-C中的中括號

  • 用於通知某個對象該作什麼;
  • 方括號內第一項是對象,其他部分是你須要對象執行的操做;
  • 在objective-c中通知對象執行某種操做,稱爲發送消息。(也叫調用方法)。 Objective—C代碼語句必須分號;結束,這與C的語法是相同的。 在Objective-C語法中,@interface和@implementation都是須要以@end結束。
相關文章
相關標籤/搜索