美文网首页
在 ARC 模式下 代理是使用 assign 还是 weak 修

在 ARC 模式下 代理是使用 assign 还是 weak 修

作者: 倪灏 | 来源:发表于2018-03-13 10:22 被阅读0次

    ARC 模式下一般情况下 应该使用 weak 修饰,少数情况下使用 assign 修饰。

    为什么不使用 strong

    使用 strong 修饰代理,会产生强引用,导致循环引用不能释放的问题。

    weak 和 assign 的区别

    这个问题可以通过斯坦福大学这个公共课里的一段话来解释

    “The main difference between weak and assign is that the with weak, once the object being pointed to is no longer valid, the pointer is nilled out. Assigning the pointer the value nil avoids many crashes as messages sent to nil are essentially no-ops”
    
    Excerpt From: Daniel H Steinberg.
    
    “Developing iOS 7 Apps for iPad and iPhone.” Dim Sum Thinking, Inc, 2014. iBooks. iTunes - Books
    

    也就是说 weak 比 assign 多了一个功能,当引用计数为0的时候 weak 会自动将 delegate = nil,这样再向 weak 修饰的对象发送消息就不会出现野指针 crash。

    weak 和 assign 分别在什么情况下使用

    ARC 模式下,绝大部分情况下都可以使用 weak 来修饰代理;当需要在代理的 dealloc方法中访问代理对象做一些特殊操作的时候就需要使用 assign 来修饰代理,然后在代理的 dealloc 方法的最后 手动设置代理为空(self.delegate = nil)。

    相关文章

      网友评论

          本文标题:在 ARC 模式下 代理是使用 assign 还是 weak 修

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