美文网首页
属性修饰 区别

属性修饰 区别

作者: 爱喝农药de清凉 | 来源:发表于2018-05-02 11:16 被阅读7次

原文章 :链接: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引用对象,会导致循环引用造成对象不能释放,造成内存泄漏。

相关文章

网友评论

      本文标题:属性修饰 区别

      本文链接:https://www.haomeiwen.com/subject/fxgqrftx.html