iOS開發系列 ARC淺解

2022-05-03 15:12:22 字數 1234 閱讀 3011

所謂arc就是automatic reference counting , 即自動引用計數。arc是自ios5引入的。arc機制的引入是為了簡化開發過程的記憶體管理的。相對於之前的mrc (manual reference counting) , arc機制顯得更加自動化。在使用arc開發過程中,開發者只需考慮strong / weak 的使用,不再需要考慮物件何時要retain,release/autorealease。使用arc一般不會降低程式的效率。

arc乙個很重要的原則是:只要某個物件被任一strong指標指向,那麼它將不會被銷毀。如果物件沒有被任何strong指標指向,那麼就將被銷毀

arc是基於引用計數的,當某個物件被乙個strong指標指向時,它的計數+1。當沒有strong指標指向時,其計數為0,此時物件會被銷毀。只要乙個物件有至少乙個strong指標指向時,它就不會被銷毀。但arc容易造成乙個 strong reference cycle 的問題,這樣即使addbook 和 entry 這兩個物件都不再使用了,但是由於arc機制,這兩個物件都互相有strong指標指向,所以這兩個物件都不會被**,從而造成記憶體無法被釋放。

針對上面的情況,有一種解決方法:在其中乙個物件中引入weak,替換其strong

引入weak後,當entry使用完後,由於指向addrbook沒有strong指標,所以addrbook會首先被釋放,然後由於addrbook被釋放,指向entry的strong指標也會銷毀,此時沒有指向entry的strong指標,所以entry也會被釋放。這樣就不會出現記憶體無法被釋放的情況。

這裡就有乙個問題了,什麼時候應該用strong,什麼時候應該用weak呢?看以下解析:

如圖所示,viewcontroller直接持有view,所以viewcontroller應該要有乙個strong指向view。同理,view直接持有subviews,所以也應該要有strong指向subviews。由於viewcontroller要使用subviews物件,但又不想直接持有subviews,所以只好通過weak指向subviews。這樣的話,可以在viewcontroller中不改變view的持有關係,就可以使用subviews物件。從圖中可以得出乙個通用的規律:對於有直接持有的關係,持有者要通過strong指向被持有者。對於有間接持有關係的,間接持有者需通過weak指向間接被持有者。

參考文章:

iOS開發系列 ARC淺解

一 什麼是 arc 所謂arc就是automatic reference counting 即自動引用計數。arc是自ios5引入的。arc機制的引入是為了簡化開發過程的記憶體管理的。相對於之前的mrc manual reference counting arc機制顯得更加自動化。在使用arc開發過...

iOS應用開發 ARC

arc是什麼 arc是ios 5推出的新功能,全稱叫 arc automatic reference counting 簡單地說,就是 中自動加入了retain release,原先需要手動新增的用來處理記憶體管理的引用計數的 可以自動地由編譯器完成了。該機能在 ios 5 mac os x 10....

iOS 開發,混合使用 ARC 和非ARC

前提知識 arc automatic reference counting,自動引用計數 在開發 ios 3 以及之前的版本的專案時我們要自己負責使用引用計數來管理記憶體,比如要手動 retain release autorelease 等,而在其後的版本可以使用 arc,讓系統自己管理記憶體。問題...