美文网首页iOS
iOS中weak和assign的区别

iOS中weak和assign的区别

作者: 不要重名就好 | 来源:发表于2016-09-03 16:05 被阅读1230次

 assign和weak的区别

 本质区别

 速度比较: __unsafe_unretained > __weak

@property (nonatomic, assign) Test *test;  // 真实类型是 Test *__unsafe_unretained _test;

__unsafe_unretained的特点:

1.不是强引用, 不能保住OC对象的命

2.如果引用的OC对象销毁了, 指针并不会被自动清空, 依然指向销毁的对象(很容易产生野指针错误: EXC_BAD_ACCESS)

@property (nonatomic, weak) Test *test;  // Test * _Nullable __weak test;

__weak的特点:

1.不是强引用, 不能保住OC对象的命

2.如果引用的OC对象销毁了, 指针会被自动清空(变为nil), 不再指向销毁的对象(永远不会产生野指针错误)

- 用途

- assign一般用在基本数据类型上面, 比如int\double等

- weak一般用在代理对象上面, 或者用来解决循环强引用的问题

相关文章

网友评论

    本文标题:iOS中weak和assign的区别

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