Objective-C是一種簡單的面向對象的計算機語言。Oobjective-C擴展了標準的ANSI C語言。類的語法和設計主要是基於Smalltalk,最先的面向對象編程語言之一。objective-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語法格式有:
兩種建立新對象的方法:
這兩種方法是等價的,但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中的中括號