共同點(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的過程
小伙伴們可以嘗試嘗試了……^_^