先來一發(fā)代碼命贴,捋一捋(+方法就是類方法道宅,-方法就是實例方法):
+ (void)thisIsAClassMethod; // 類方法,不需要實例化對象就可以調用
- (void)thisIsAnInstanceMethod; // 實例方法胸蛛,必須通過實例化的對象調用
// 對象的初始化 OC中以消息機制傳遞信息污茵,發(fā)送 alloc 消息給類分配內存空間,發(fā)送 init 消息生成對象葬项,指針指向對象本身泞当。
ClassName *obj = [[ClassName alloc] init];
類方法:
1、類方法可以調用類方法民珍;
2襟士、類方法不可以調用實例方法,但是類方法可以通過創(chuàng)建對象來訪問實例方法嚷量;
3陋桂、類方法不可以使用實例變量。(可以使用self 蝶溶,因為 self 不是實例變量嗜历。)
4、類方法作為消息抖所,可以發(fā)送到類或者對象里面去(就是可以通過類或者對象調用類方法)
實例方法里面的 self 梨州,是對象的首地址。
類方法里面的 self 部蛇,是 class 摊唇。
使用過程中既可以使用新定義的方法名,也可以使用以前的方法(點表示法)
屬性特征:readwrite readonly assign retain copy nonatomic
assign:默認行為涯鲁,使用 @property int num 就是使用了 assign 行為巷查,就是給實例變量賦了一個值
retain:實現(xiàn)了兩個功能,一個是保留了賦值時傳遞的對象抹腿,一個是賦值前釋放了以前的值岛请,使用時加上 @property (retain) int num;
copy:發(fā)送一條復制的消息給被傳遞的對象,保留它警绩,并釋放任何以前的值崇败;
nonatomic:非原子訪問器,加上后可以保證屬性在被一個線程使用時不被另一個線程訪問,不存在 atomic 關鍵字后室,默認情況下缩膝,所有方法都是自動合成的。(類似Java中的線程鎖機制 synchronised)
readwrite:可讀寫
readonly:只讀