iOS中的 assign,weak,strong,copy的区别

热门标签

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

1.assign和weak的区别

(1)assign适用于修饰数据类型,weak适用于修饰NSObject对象,并且是一个弱类型。

assign也可以修饰对象,但是我们一般不会用它去修饰,因为编译的时候会产生警告(Assigning retrained object to unsafe property;object will be released after assignment),因为被它修饰的对象在释放后,指针的地址还是存在的,也就是说指针并没有被置为nil,造成野指针,对象一般分配在堆上的某块内存,如果后续的内存分配中,刚好分到这块内存,会造成程序的崩溃。

assgin可以修饰基本数据类型,是因为基础数据类型一般分配到栈上的,栈的内存会由系统自己处理的,不会造成野指针。

weak修饰的对象在释放后,指针地址会被置为nil,所以现在一般弱引用就是用weak。

weak的使用场景:

在ARC下,有可能出现循环引用的时候,往往通过让其中一端使用weak来解决。比如delegate的代理属性,通常会使用weak。

2.strong和copy的区别

strong和copy都会使引用计数加1,但strong是两个指针指向同一个内存地址,copy是在内存中拷贝一份对象,两个指针指向不同的内存地址。

3.__block与weak的区别

__block是用来修饰变量的,这个变量就可以在block中被修改。

__block:使用__block秀死的变量在block代码块中会被retain(ARC下会retain,MRC不会被retain)

__weak:使用__weak修饰的变量不会在block代码块中retain

4.block变量定义时为什么用copy?block是放在哪里的?

block的循环引用并是不strong导致的,在ARC环境下,系统底层也会做一次copy操作,block从栈区复制到一块内存到堆区,所以strong和copy修饰上没有本质的区别,只不过copy的效率更高一点

标签:

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术狗|博客
原文地址:《iOS中的 assign,weak,strong,copy的区别》 发布于2019-10-04

分享到:
赞(0)

评论 抢沙发

9 + 9 =


iOS中的 assign,weak,strong,copy的区别

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录