属性修饰 区别

原文章 :链接:https://www.jianshu.com/p/3cbc79424fb8

用copy修饰block时在MRC和ARC下的区别
MRC环境下
(1)block访问外部局部变量,block存放在栈里面。
(2)只要block访问整个app都存在的变量,那么肯定是在全局区。
(3)不能使用retain引用block,因为block不在堆区里面,只有使用copy才会把block放在堆区里面。

ARC环境下
(1)只要block访问外部局部变量,block就会存放在堆区。
(2)可以使用strong去引用,因为本身就已经存放在堆区了。
(3)也可以使用copy进行修饰,但是strong性能更好。

下面说一下前面所述的assign和weak的区别:当它们指向的对象释放以后,weak会被自动设置为nil,而assign不会,所以会导致野指针的出现,可能会导致crash。
下面说一下strong和weak的区别:
strong :表明是一个强引用,相当于MRC下的retain,只要被strong引用的对象就不会被销毁,当所有的强引用消除时,对象的引用计数为0时,对象才会被销毁。
weak : 表明是一个弱引用,相当于MRC下的assign,不会使对象的引用计数+1。
两个不同对象相互strong引用对象,会导致循环引用造成对象不能释放,造成内存泄漏。

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

相关阅读更多精彩内容

友情链接更多精彩内容