__unsafe_unretain、__strong、__weak、__autoreleasing

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

參考一 ? ? 參考二


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


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

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


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

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

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容