先來一發(fā)代碼,捋一捋(+方法就是類方法,-方法就是實例方法):
+ (void)thisIsAClassMethod; // 類方法,不需要實例化對象就可以調(diào)用
- (void)thisIsAnInstanceMethod; // 實例方法,必須通過實例化的對象調(diào)用
// 對象的初始化 OC中以消息機制傳遞信息,發(fā)送 alloc 消息給類分配內(nèi)存空間,發(fā)送 init 消息生成對象,指針指向?qū)ο蟊旧怼?ClassName *obj = [[ClassName alloc] init];
類方法:
1、類方法可以調(diào)用類方法;
2、類方法不可以調(diào)用實例方法,但是類方法可以通過創(chuàng)建對象來訪問實例方法;
3、類方法不可以使用實例變量。(可以使用self ,因為 self 不是實例變量。)
4、類方法作為消息,可以發(fā)送到類或者對象里面去(就是可以通過類或者對象調(diào)用類方法)
實例方法里面的 self ,是對象的首地址。
類方法里面的 self ,是 class 。
使用過程中既可以使用新定義的方法名,也可以使用以前的方法(點表示法)
屬性特征:readwrite readonly assign retain copy nonatomic
assign:默認行為,使用 @property int num 就是使用了 assign 行為,就是給實例變量賦了一個值
retain:實現(xiàn)了兩個功能,一個是保留了賦值時傳遞的對象,一個是賦值前釋放了以前的值,使用時加上 @property (retain) int num;
copy:發(fā)送一條復(fù)制的消息給被傳遞的對象,保留它,并釋放任何以前的值;
nonatomic:非原子訪問器,加上后可以保證屬性在被一個線程使用時不被另一個線程訪問,不存在 atomic 關(guān)鍵字,默認情況下,所有方法都是自動合成的。(類似Java中的線程鎖機制 synchronised)
readwrite:可讀寫
readonly:只讀