2016年2月14日 星期日

iOS筆記:ARC & KVO

Automatic Reference Counting(ARC): 提供自動管理對Objective-C對象的分配記憶體,而不是讓開發者總是在思索什麼時候retain和什麼時候release操作. ARC會預估對象的生命週期並且在編譯時自動插入合適的內存管理方法,也會生成合適的dealloc方法。

strong: 和原來的retain比較相似,strong的property將對應__strong的指標,它將持有所指向的對象
weak:不持有所指向的對象,而且當所指對象銷毀時能將自己置為nil,基本所有的outlet都應該用weak

ARC 是如何判斷何時要回收記憶體的?

compiler會分析你的程式碼中呼叫的message是否有含alloc, new, copy, mutableCopy這些開頭
如果有的話就知道回傳的object的ownership是你的
接著根據你所在的message是否有alloc, new,… 來決定你回傳的物件是哪種類型。

Retain cycle (互為strong)

既然父對象持有子對象,而子對象會隨父對象釋放而釋放,那麼,如果兩個對象相互為父對象怎麼辦?

比如A和B兩個對象,A持有B,B同時也持有A,按照上面的規則,A只有B釋放之後才有可能釋放,同樣B只有A釋放後才可能釋放,當雙方都在等待對方釋放的時候, retain cycle就形成了,結果是,兩個對象都永遠不會被釋放,最終內存泄露。

Key-Value Observing(KVO)

它提供一種機制,當指定的對象的屬性被修改後,則對象就會接受到通知。簡單的說就是每次指定的被觀察的對象的屬性被修改後,KVO就會自動通知相應的觀察者了。

參考:
1. http://onevcat.com/2012/06/arc-hand-by-hand/
2. http://seanysh.blogspot.tw/2014/04/ios-arc.html

沒有留言:

張貼留言