美文网首页搬砖
iOS 关于修饰代理用weak还是assign。

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

作者: 路上的Acmen | 来源:发表于2016-01-15 09:15 被阅读2300次

对于这个问题,昨天看朋友写的代码偶尔注意到的。自己平常都是用weak进行修饰,他却用到了assign一时不知对错。然后搜索了一下。下面罗列一下结果。

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

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

对于assing:也有weak的功效。但是网上有assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针。以上是自己搜索看到的解答,谁有更好的说法,可以评价回复。采纳优质意见。

相关文章

网友评论

  • CoderW:assign对应的所有权修饰符为__unsafe_unretained,见名知意, 不安全, 如果超出作用域后再去访问assign所修饰的对象, 会因为访问已废弃对象而造成程序崩溃. weak对应的所有权修饰符为__weak, 两者都能避免循环引用, 但是和__unsafe_unretained的区别在于若对象被废弃, 此弱引用将自动失效, 并将修饰对象nil.
  • 东方奇迹:weak和assign都不会增加引用计数,区别是修饰的对象在释放时所做的操作不同,weak是会把对象置为nil,assign则不会,assign一般适用与基本数据类型

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

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