共同点:
都是弱引用类型
区别:
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的过程
小伙伴们可以尝试尝试了……^_^
网友评论