共同點:
都是弱引用類型
區別:
1.assign是在arc和mrc中同時存在的,而weak是在arc出現的時候才開始出現的
2.assign:當屬性所指向的對象消失的時候變量不會自動賦值為nil,但是當用weak修飾的變量可能會自動賦值為nil
上代碼:
代碼圖
生成用assign、weak、strong修飾的三個變量:assig、wea、str;
將self.str賦值給self.wea和self.assig,然后釋放self.str,那么相應的self.wea指向的在堆中的對象就會釋放,self.wea也會將值設置為nil
而self.assig中的引用雖然釋放了,但是值卻還是原來self.str中的值,所以當我們引用的時候就會造成野指針
涉及到delegate:
不管是在非ARC還是ARC,使用assign時,由于delegate值不會自動置nil,所以都需要注意釋放:
delegate方法
需要在dealloc中去釋放
釋放delegate
所以當我們用weak修飾delegate,那么delegate被釋放時,delegate就會自動置nil,所以就省去了dealloc的過程
小伙伴們可以嘗試嘗試了……^_^