美文网首页
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 拥有相同的生命周期才可以有效的避免强制解包!

    相关文章

      网友评论

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

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