美文网首页
iOS 关于修饰代理用weak还是assign, strong

iOS 关于修饰代理用weak还是assign, strong

作者: 陪妮走未来 | 来源:发表于2018-04-20 15:05 被阅读38次

最近在项目,看到有的代理用weak、assign、strong修饰。

对于weak: 指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制。

对于strong:该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用(Retain Cycles)

对于assing:也有weak的功效。但是网上有assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针。

经过一番研究,发现如果使用@property (nonatomic, assign, readwrite) id delegate;

会有crash,报错EXC_BAD_ACCESS

声明一个delegate,那么即便delegate指向的对象销毁了,delegate中依然会保存之前对象的地址

即,delegate成为了一个野指针...

而使用weak,则不会有上述问题,当delegate指向的对象销毁后,delegate = nil,

所以答案就是,使用weak

相关文章

网友评论

      本文标题:iOS 关于修饰代理用weak还是assign, strong

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