美文网首页
weak和unowned

weak和unowned

作者: 小凡凡520 | 来源:发表于2018-11-26 15:01 被阅读2次
一、循环引用
2699243-6e099cd43f50766b.png

如图所示的情况中,john指向的对象强引用了unit4A指向的对象,而unit4A指向的对象又强引用了john指向的对象

利用 weakunowned 可以解决循环引用问题

二、weak

weak 即弱引用,当把一个实例声明为弱引用时,此实例不会持有这个对象,即不会使对象的引用计数加1。当对象被废弃,其所有的弱引用会被置为 nil。

一般使用在两个对象满足其生命周期没有太大关系之间。例如viewController和delegate等,它们的生命周期不是包含关系,而是互相平行的

三、unowned

表明不持有引用的对象,但是却假定该引用会一直有效

无主引用,与弱引用一样,当把一个实例声明为无主引用时,此实例不会持有这个对象,即不会使对象的引用计数加1。但与弱引用不同的是,当对象被废弃,其无主引用并不会被置为 nil

一般使用在两个对象满足其中一个对象的生命周期包含另一个对象的生命周期。例如一个viewController中的timer的生命周期会被包含在viewController生命周期内,所以timer中的Block对self(viewController)的引用就使用unowned

根据属性是否为可选类型,你可以在 weakunowned 之间进行选择。

相关文章

  • [译]Swift中的weak self和unowned self

    在找关于weak和unowned方面的知识,看到的一篇文章。 原文来自Weak self and unowned ...

  • Swift 内存管理,weak 和 unowned

    在内存管理中,weak和unowned都可以防止发生引用循环问题,但是weak和unowned的区别在哪里呢? u...

  • unowned和weak的区别—swift

    weak引用和unowned引用有些类似但不完全相同。Unowned 引用,像weak引用一样,不会增加对象的引用...

  • 内存管理

    三种引用 weak unowned的使用限制 weak unowned只能用在类实例上面 协议遵守AnyObjec...

  • weak和unowned

    一、循环引用 如图所示的情况中,john指向的对象强引用了unit4A指向的对象,而unit4A指向的对象又强引用...

  • weak和unowned

    unowned: 假设引用对象在生命周期总是存在,这样其属性声明是非可选类型。 weak: 对象在预见时间内可能为...

  • WEAK 和 UNOWNED

    相同 1、weak和unowned都不会增加引用计数器 2、两者都是为了避免循环引用而存在的 区别 1、weak指...

  • Swift中关于unowned的坑

    “Like a weak reference, an unowned reference does not kee...

  • [Swift Tips 读书笔记]从 Objective-C 到

    @objc 和 dynamic 可选协议和协议扩展 内存管理,weak 和 unowned @autoreleas...

  • Swift weak和unowned

    弱引用和无主引用 在闭包和捕获的实例总是互相引用并且总是同时释放时,将闭包内的捕获定义为无主引用。 相反,在被捕获...

网友评论

      本文标题:weak和unowned

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