iOS中的assign和weak不同

共同点:

都是弱引用类型

区别:

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的过程

小伙伴们可以尝试尝试了……^_^

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容