天天看點

Objective-C:iOS基礎——個人筆記(八)類的加載過程:SEL : 方法的位址記憶體管理@property (retain) 對象類;@class 類名  :循環引用兩端循環引用解決方案autorelease 方法傳回對象本身

類對象、類的加載過程、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操作

池子以棧結構存在(先進後出)

繼續閱讀