iOS中的assign和weak不同

共同點(diǎn):

都是弱引用類型

區(qū)別:

1.assign是在arc和mrc中同時(shí)存在的,而weak是在arc出現(xiàn)的時(shí)候才開始出現(xiàn)的

2.assign:當(dāng)屬性所指向的對象消失的時(shí)候變量不會自動賦值為nil,但是當(dāng)用weak修飾的變量可能會自動賦值為nil


上代碼:


代碼圖

生成用assign、weak、strong修飾的三個(gè)變量:assig、wea、str;

將self.str賦值給self.wea和self.assig,然后釋放self.str,那么相應(yīng)的self.wea指向的在堆中的對象就會釋放,self.wea也會將值設(shè)置為nil

而self.assig中的引用雖然釋放了,但是值卻還是原來self.str中的值,所以當(dāng)我們引用的時(shí)候就會造成野指針


涉及到delegate:

不管是在非ARC還是ARC,使用assign時(shí),由于delegate值不會自動置nil,所以都需要注意釋放:


delegate方法

需要在dealloc中去釋放


釋放delegate

所以當(dāng)我們用weak修飾delegate,那么delegate被釋放時(shí),delegate就會自動置nil,所以就省去了dealloc的過程

小伙伴們可以嘗試嘗試了……^_^

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

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

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