美文网首页
unowned 和 weak 的小事儿

unowned 和 weak 的小事儿

作者: 山已几孑 | 来源:发表于2017-11-28 09:31 被阅读0次

自从接触了swift 之后,Closure 算是用的最多的东西了,为了避免循环引用,一直喜欢在Closure里面 使用 [unowned self] in这种方式,来避免这个问题。

然而

当页面存在网络请求的时候!
在这里,我使用了Alamofire 和 MJRefresh 来请求数据和控制页面刷新,且,tableView 被我抢解包了(这里这个tableView是必然存在的。。。页面开始我就创建了它)

然后问题来了:当网络情况差的时候,页面被销毁,但是网络请求并没有被取消,然后网络数据下来之后,继续执行了Closure,此时程序崩溃,因为self已经不在了。

参考了Swift:Weak 和 Unowned之后,

解决方案:

[unowned self] 改为了 [weak self] 避免强制解包

不靠谱的分析

大概是unowned 捕获的对象不是Option 类型的对象,unowned 必须要求对象必须提前创建, 并和Closure 拥有相同的生命周期才可以有效的避免强制解包!

相关文章

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

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

  • unowned 和 weak 的小事儿

    自从接触了swift 之后,Closure 算是用的最多的东西了,为了避免循环引用,一直喜欢在Closure里面 ...

  • 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...

网友评论

      本文标题:unowned 和 weak 的小事儿

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