1、Obj-C代碼的副檔名為“.m”.
2、Obj-C的要包含標頭檔時,可以使用 #include 但更一般的使用 #import ( 由GCC編譯器提供),後者可以保證標頭檔只被包含一次(l類似C中的#ifdef)。
3、有關Cocoa 的架構,可參照
http://www.cocoachina.com/newbie/basic/2009/0611/130.html
4、hello Objecitve-C
#import <Foundation/Foundation.h>
Int main(int argc, const char *arge[])
{
NSLog (@”Hello Obj-C!”);
Return (0);
}
NSLog()函數中的NS:Cocoa對所有函數、常量和類型名稱都添加了NS首碼。(NSLog(@”%d is a %@”,a,@”num”);)
@”Hello Obj-C!”:obj-c添加的特性,雙引號中的 字串前有一個@,表示引用的字串應該作為Cocoa的NSString元素處理。
5、c中的bool的true和false對應Cocoa中的BOOL的YES和NO()1個位元組.(注意:在obj-c中不能理解 非零值為YES,1不等於YES)
6、Id 類型
在Objective-C 中,id 類型是一個獨特的資料類型。在概念上,類似Java 的Object 類,可以轉換為任何資料類型。換句話說,id 類型的變數可以存放任何資料類型的對象。在內部處理上,這種類型被定義為指向對象的指標,實際上是一個指向這種對象的執行個體變數的指標。id 是一個指向任何一個繼承了Object(或者NSObject)類的對象。需要注意的是id 是一個指標,所以在使用id的時候不需要加星號。http://book.51cto.com/art/201105/262238.htm
7、obj-c中的方括弧:
用於通知某個對象該幹什麼。在方括弧中,第一項是對象,其餘部分是你需要對象執行的操作(調用函數)。
8、方法聲明與調用:
@interface Circle : NSObject
{
ShapeColor fillColor;
ShapeRect bounds;
}//建立兩個執行個體變數
- (void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end // Circle
@interface Circle : NSObject ---定義了Circle的 類,該類是基於NSObject的,即繼承。
- (void) draw; 前面的短線表示這是obj-c中的方法聲明,這是一種區分函數原型與方法聲明的方式;void代表傳回值為空白,draw為方法名。
- (void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
這兩個聲明的方法中都有一個參數, (參數類型)參數
有如:
-(void) setTo: (int) n over: (int) d
{
numerator = n;
denominator = d;
}
[aFraction setTo: 100 over: 200];//調用
註:objective-c 的方法參數名有些怪異,第一個參數是沒有參數名的,如果硬要說有,那就是方法名,
統一說來,見到冒號,冒號前面那個就是參數名。
再舉例,沒有參數名的方法定義與調用:
-(int) set: (int) n: (int) d;
[aFraction set: 1 : 3];//調用
(http://www.cnblogs.com/54007/archive/2011/02/10/1950801.html)
@interface為類的聲明,一般在標頭檔中;@implementation為類的實現,一般在”.m”檔案中,接下來就是各個方法的定義,不必按照@interface中的順序定義方法,甚至可以定義在@interface中無相應聲明的方法。@interface和@implementation方法的形式參數名要避免相同。
9、執行個體化對象:id ivars = [Class new];
10、每個方法的調用都包括了一個名為self的隱藏函數,同時對象本身。使用self參數後,方法可以尋找並操作對象的資料(this指標)。
11、繼承:e.g. @interface Circle : NSObject
Obj-c不支援多繼承,例如:@interface Circle : NSObject , PrintableObject是不能夠被編譯器識別的。但是可以從其他特性吸收多繼承的優點:如分類、協議。
12、重構:移動和簡化代碼的方式。
13、obj-c中的super相當於調用父類的方法,在重寫方法中充分利用超類代碼。
14、description:
-------------------------------------------------------
@interface Tire :NSobject
@end
@implementation tire
-(NSstring *) description
{
return(@"i am a tire");
}
NSLog (@"%@", tires);
descriptong方法預設返回對象的描述資訊,
NSLog(@"%@", objectA);這會自動調用objectA的descriptong方法來輸出ObjectA的描述資訊,
當我們重寫某個類的descriptong方法後,
再次輸出NSLog(@"%@", objectA);時,就會調用我們覆寫的descriptong方法,這樣就達到自訂對象的描述資訊!!!
15、存取方法(accessor method):用來讀取或改變對象特定屬性的方法。如setter、getter方 法(注意:setter方法的方法名一般加set首碼,e.g.setEngine,getter則根據返回的屬性的名稱來命名,e.g.engine.因為get在cocoa中有特殊含義,它意味著這個方法會通過你當做參數傳入的指標來返回數值)。
在對其他對象的屬性進行操作時,應該始終使用對象所提供的存取方法,永遠不要直接改變其他對象屬性的數值。如,main函數不應直接存取類的執行個體變數。這也是間接的一種體現。
16、exit()函數:exit(1)表示發生錯誤後退出程式,exit(0)表示正常退出。參數0和1是返回給作業系統的,作業系統根據參數判斷程式是否正常執行了。(that is 防禦式編程)
17、Obj-C中所有對象間的互動都是通過指標實現的。
18、@class 某些情況可代替#import ,減少編譯次數,e.g.在複合類中的標頭檔中使用。。。
19、一些有用的資料類型(struct):NSRange、NSPoint、NSSize、NSRect…..
20、NSString類的方法
建立字串 +(id) stringWithFormat : (NSString *) format,……;
e.g. NSString *height;
height = [ NSString stringWithFormat: @”height is %d feet, %d inchs”,5 , 11];
如果在聲明方法時添加了加號,表示這個方法定義為類方法(Factory 方法)。這個方法屬於類對象(而不是類的執行個體對象)並且通常用於建立新的執行個體。
大小 -(unsigned int) length;
e.g. unsigned int length = [height length];
比較 – (BOOL) isEqulToString: (NSString *) aSting; 還有compare方法
檢查字串內是否還包含別的字串:hasPrefix hasSuffix
NSSting為不可改變的字串類型,其子類NSMutableString為可修給的字串類型。
NSMutableString類的方法:
建立 stringWithCapacity,當然stringWithFormat也可以
添加字元: appendString 、 appendFormat
刪減字元: deleteCharactersInRange與rangeOfString集合使用
21、NSArray類:
建立 arrayWithObjects方法
e.g. NSArray *array;
array = [NSArray arrayWithObjecrs: @”one”, @”two”, @”three” , nil];(nil空,表列表結束)
[array count]可獲得數組個數
[array objectAtIndex:i] 可得到數組的內容(索引遍曆)
切分數組componentsSeparatedByString
合并數組componentsJoinedByStrring
可變數組NSMutableArray類:addObject,removedObjectAtIndex
22、列舉程式NSEnumerator
NSEnumerator *enumerator;
Enumerator = [array objectEnumerator];//向數組請求列舉程式
id thingie;
while(thingie = [enumerator nextObject]){
NSLog(@”I found %@”, thingie);
}
23、快速枚舉:
for(NSSting *string in array){
NSLog(@”I found %@”, string);
}
24、NSDictionary字典 散列表 關聯陣列:在給定的key(通常是NSString)下儲存一個value(可以使任何類型的對象)
Of course, 也有NSMutableDictionary
25、NSNumber:Cocoa用來封裝基礎資料型別 (Elementary Data Type)的類。
NSValue可以封裝任意值