標籤:
分類(Category):可以給某一個類擴充一些方法(不修改原來類的代碼)
作用:在不改變原來類內容基礎上,可以為類增加一些方法
使用注意:
1. 只能增加方法,不能增加成員變數
2. 分類方法實現中可以訪問原來類中的成員變數
3. 分類可以重新實現原來類中的方法,會覆蓋原來類的方法,導致原來類的方法無法再使用
4. 分類的優先順序最高:調用一個方法優先去分類中找,再去原來類,然後父類中找
分類(最後編譯的優先)—》原來類—》父類
聲明:
@interface 類名(分類名稱)
@end
實現:
@implementation 類名
@end
類的本質:
類本身也是一個對象,是Class類型的對象,簡稱類對象
Class類型的定義
typedef struct objc class *Class
類名代表著類對象,每個類只有一個類對象
+load方法和+initialize方法:
1.當程式啟動時,就會附加元件目中所有的類和分類,而且載入後會調用每個類和分類的+load方法。只會調用一次。
2.當第一次使用某個類時,就會調用當前類的+initialize方法,一個類只會調用一次+initialize方法
3.先載入父類,再載入子類(先調用父類的+load方法,再調用子類的+load方法)
先初始化父類,再初始化子類(先調用父類的+initialize方法,再調用子類的+initialize方法
description方法
使用NSLog輸出屬性較多時,修改預設輸出,可重寫+description方法或-desription方法
+description方法:
預設情況下,使用NSLog和%@輸出對象時,調用對象的-desription方法,拿到的傳回值(NSString *)螢幕輸出結果是:<類名:記憶體位址>
+desription方法:
預設情況下,使用NSLog和%@輸出類對象時,調用類對象的+desription方法,拿到的傳回值(NSString *)螢幕輸出
注意點:
不要在-desription方法中嘗試使用self,會造成死迴圈
NSLog列印
1. %p
列印指標變數p的地址
NSLog(@"%p", &p);
列印對象地址
NSLog(@"%p", p);
2. %@
%@ 列印<類名:對象地址>
NSLog(@"%@", p);
3. _LINE_ %d 輸出當前行號
4. _FILE_ %s 輸出檔案路徑
5. _func_ %s 輸出當前函數
SEL
全稱selector
SEL 其實是對方法的一種封裝,將方法封裝成一個SEL類型的資料,去找對應的方法地址,找到方法地址就可以調用方法
_cmd 代表當前方法
訊息就是SEL
Objective-C( 文法二)