美文网首页
iOS strong weak unowned引用

iOS strong weak unowned引用

作者: 灰s | 来源:发表于2017-11-28 11:13 被阅读0次

    公司的2.0已经拿Swift全部重写了一遍,原本以为自己对Swift的基础了解应该是足够了,看来我还是想多了,当程序员确实是一个很有挑战性的工作。

    这篇文章主要写一下ARC相关的知识

    1. Strong

    原来我还以为Strong没什么好写的,后来我发现我对强引用循环的理解有点偏差。


    image.png

    这样一个强引用循环。john持有的apartment属性强引用了unit4Aunit4A持有的tenant属性强引用了john
    这里分两种情况:

    • jhon或者unit4A设置成nil,或者两者都设置成nil,并不能消除这个强引用循环。也就是会造成内存泄漏。
    • jhonapartment或者unit4Atenant设置成nil,则可以取消掉这个强引用循环。

    2. Weak和Unowned

    二者的具体使用方法我这里就不写了,可以参考文章在最后给的链接。这里我主要是记录一下二者的区别。

    • 关于两者使用的选择,Apple 给我们的建议是如果能够确定在访问时不会已被释放的话,尽量使用unowned,如果存在被释放的可能,那就选择用weak
    • 也就是说unowned不可为nilweak可以为nil

    3. 使用选择

    • 两个属性的值都允许为nil,并会潜在的产生循环强引用。这种场景最适合用弱引用来解决。
    • 一个属性的值允许为nil,而另一个属性的值不允许为nil,并会潜在的产生循环强引用。这种场景最适合通过无主引用来解决。
    • 两个属性的值都不允许为nil,并会潜在的产生循环强引用。这种场景需要一个类使用无主属性,而另外一个类使用隐式解析可选属性。(隐式可选属性也就是声明属性的时候,在类型后面加上!,比如: var p: Person!

    参考链接: http://yulingtianxia.com/blog/2014/06/17/swiftzhong-de-arc/

    相关文章

      网友评论

          本文标题:iOS strong weak unowned引用

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