ARC自動引用計數

2022-08-29 19:51:23 字數 1686 閱讀 4050

選擇專案的屬性檔案 --》 搜尋 automatic reference --》 objective-c automatic reference counting --》 yes

arc 並不是gc在執行中判斷引用計數是否為0,從而清除記憶體。而是在**編譯之前通過靜態分析工具analyze自動生成記憶體管理**。

開啟arc後,不能再使用retain等系列手動記憶體管的方法,可以重寫dealloc方法但不能再方法中[super dealloc]

core foundation的東西仍然需要手動release,即以cf打頭的物件。因為cf不在arc的範圍內。

未啟用arc之前

@implementation

nonarcobject

-(id)initwithname

:(nsstring

*)newname

return

self

;}

-(

void

)dealloc

@end

啟用arc之後
@implementation

nonarcobject

-(id)initwithname

:(nsstring

*)newname

return

self

;}

@end

強引用和若引用的概念在arc環境中才存在。強引用強引用指的是會使物件引用計數器+1的引用。類似於retain。

當所有強引用全部release 的時候物件才會被清理。

弱引用弱引用不會使物件引用計數器+1的引用。類似於assgin,直接指標賦值。

什麼時候使用若引用?

在arc環境中經常出現父子引用的情況 。

person 類中具有child 類物件指標。

child 類中具有person 類物件指標。

如果person 引用的 child 指標是強引用,並且child 引用的person 類也是強引用,將會導致物件無法釋放的問題。

1.person 類釋放會去釋放 child

2.child 類釋放的時候又要去釋放person

父子關係都是強引用,釋放的時候會出現迴圈引用無法釋放。

使用若引用即可解決,子類含有父類的若引用。

person 類強引用 child 類。

child 類弱引用 person類。

person 類釋放的時候回去釋放child , child 發現自身弱引用乙個person 則不會去清理person,只會將person 的引用設定為nil ;

若引用引用的物件被清理後,系統自動將引用設定為nil,所以若引用並不會出現殭屍指標的情況

殭屍指標:指向一塊被清理掉記憶體的指標。

ARC(自動引用計數)

arc arc是automatic reference counting 自動引用計數 的縮寫,是ios5一同推出的新特性,但是ios4.3也支援arc,只是不能使用weak。使用arc,不需要再retain release autorelease,因為編譯器會在合適的地方自動的插入retain r...

Swift 自動引用計數(ARC)

swift使用自動引用技術 arc 這一機制來跟蹤和管理應用程式的記憶體。通常情況下我們不需要去手動釋放記憶體,因為arc會在類的例項不再被使用時,自動釋放其占有的記憶體。但在有些時候我們還是需要在 中實現記憶體管理。class person deinit 值會被自動初始化為nil,目前還不會引用到...

ARC自動引用計數和分類

1.物件自動釋放池的使用 person p person new autoreleasepool 快速建立類的類方法定義 instancetype person person p person person arc專案如何相容mrc的 專案 編譯選項 雙擊類檔案 fno objc arc 將乙個類中...