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