unowned 和 weak 的小事儿

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

然而

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

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

参考了Swift:Weak 和 Unowned之后,

解决方案:

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

不靠谱的分析

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理在iOS开发中很重要,在iOS 5之前,开发者需要使用MRC(Manual Reference Count...
    flionel阅读 3,764评论 3 15
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,251评论 4 61
  • 人生好比阅读。除却少年时看的言情玄幻类的青春文学来看,我们阅读视线往往先被心灵鸡汤吸引,而后逐渐接触现当代文学作品...
    CaelynGu阅读 329评论 0 3
  • 【按】这两天从百度中搜出一篇朋友写的旧文,生动记录了2014年夏天的百利生。回忆下走过的路,好温暖。 作者:马小东...
    一白酿酒阅读 405评论 0 2
  • java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...
    shuaidong阅读 348评论 0 0