選擇專案的屬性檔案 --》 搜尋 automatic reference --》 objective-c automatic reference counting --》 yes
arc 並不是gc在執行中判斷引用計數是否為0,從而清除記憶體。而是在**編譯之前通過靜態分析工具analyze自動生成記憶體管理**。
開啟arc後,不能再使用retain等系列手動記憶體管的方法,可以重寫dealloc方法但不能再方法中[super dealloc]
core foundation的東西仍然需要手動release,即以cf打頭的物件。因為cf不在arc的範圍內。
未啟用arc之前
啟用arc之後@implementation
nonarcobject
-(id)
initwithname:(nsstring
*)newname
return
self
;
}
-(
void
)dealloc
@end
強引用和若引用的概念在arc環境中才存在。強引用強引用指的是會使物件引用計數器+1的引用。類似於retain。@implementation
nonarcobject
-(id)
initwithname:(nsstring
*)newname
return
self
;
}
@end
當所有強引用全部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 將乙個類中...