類對象、類的加載過程、SEL、記憶體管理、循環引用、autorelease
類也是對象,稱為類對象
類對象 == 類
類的加載過程:
(1)當程式啟動的時候,就會加載一次所有的類,類加載完畢後就會調用+ load方法
(2)當第一次使用這個類的時候,就會調用一次 + initialize 方法
- description 方法:利用%@ 輸出對象就會調用此方法
NSLog 輸出C語言字元串的時候,不能有中文
SEL : 方法的位址
SEL對象的建立:
(1)SEL s = @selector(test);
(2)SEL s2 = NSSelectorFromString(@"test");
_cmd 代表目前方法
記憶體管理
每個對象都有引用計數器(4個位元組),表示對象被引用的次數
retain 引用計數器+1
release 引用計數器-1
retainCount 獲得目前引用計數器值
野指針 : 指向僵屍對象(不可用記憶體)的指針
EXC_BAD_ACCESS : 通路了一塊壞的記憶體,野指針錯誤
OC不存在空指針錯誤,給空指針發送消息不報錯
dealloc 回收時調用
最後一定調用[super dealloc];
@property (retain) 對象類;
1、set方法記憶體管理相關參數
retain:release 舊值 retain 新值
assign:直接指派(預設)
copy:release 舊值 copy 新值
2、是否要生成set方法
readwrite:同時生成setter 和 getter
readonly:隻生成getter
3、多線程管理
nonatomic:性能高(一般用這個)
atomic:性能低(預設)
@class 類名 :循環引用
.h檔案用@class
.m檔案用@import
兩端循環引用解決方案
(非ARC):一端用retain,一端用assign
(ARC):一端用strong,一端用weak
@autoreleasepool{}// 建立釋放池
autorelease 方法傳回對象本身
autorelease 會将對象放到一個自動釋放的池中
當自動釋放池被銷毀時,會對池子裡面的所有對象做一次release操作
池子以棧結構存在(先進後出)