__unsafe_unretain、__strong、__weak、__autoreleasing

iOS開發(fā)ARC內(nèi)存管理技術(shù)要點(diǎn)

參考一 ? ? 參考二


strong,weak 用來修飾屬性。
strong 用來修飾強(qiáng)引用的屬性;


@property (strong) SomeClass * aObject; 對應(yīng)原來的
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject;

weak 用來修飾弱引用的屬性;
@property (weak) SomeClass * aObject; 對應(yīng)原來的
@property (assign) SomeClass * aObject;


__weak, __strong , __unsafe_unretained, __autoreleasing 都是用來修飾變量的。
__strong 是缺省的關(guān)鍵詞。
__weak 聲明了一個可以自動 nil 化的弱引用。
__unsafe_unretained 聲明一個弱應(yīng)用,但是不會自動nil化,也就是說,如果所指向的內(nèi)存區(qū)域被釋放了,這個指針就是一個野指針了。
__autoreleasing在ARC中主要用在參數(shù)傳遞返回值(out-parameters)和引用傳遞參數(shù)(pass-by-reference)的情況下。詳見

為什么我們?nèi)砸褂胈_unsafe_unretain呢?這是因?yàn)開_weak直到iOS5.0以及l(fā)ion之后才出現(xiàn)。

而__autoreleasing 的英文解釋為:to denote arguments that are passed by reference (id *) and are autoreleased on return,即主要是在引用傳參時使用。

最后需要注意的一點(diǎn)是:cocoa設(shè)定了一個規(guī)則,即父對象建立子對象的強(qiáng)引用,而子對象只對父對象建立弱引用。

而使用弱引用時需要注意,當(dāng)你發(fā)消息給一個被dealloc的弱引用對象時,你的程序會崩毀。因此,必須細(xì)致地判斷對象是否有效。多數(shù)情況下,被弱引用地對象是知道其他對象對它的弱引用的,所以當(dāng)它自己dealloc時,需要通知對它弱引用的其他對象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容