zoukankan      html  css  js  c++  java
  • Weak is not weak,Strong is not strong

    问题

    今天做浏览器Controller的时候,碰到了一个奇怪的问题:每次pop浏览器controller之后,等几秒,总会碰到类似下面的错误(其中的xxxController就是浏览器或继承他的子类Controller)

     *** -[xxxController respondsToSelector:]: message sent to deallocated instance 0xecf79b0
    

    排错

    加各种断点、开Zombie,内存Malloc,Profiling都无法有效的找到问题所在。

    最后下决心一点一点的屏蔽代码,终于发现原来有通过代码创建的webView,对应的@property的修饰被误写为strong,改为weak之后,这个世界终于又平静了。

    症结

    问题解决,反过来想一想,之所以会导致崩溃,应该是因为被strong修饰的webView在controller销毁的时候,还没有被销毁掉,还在加载网页并触发delegate的回调,而webView的delegate刚好是已被销毁的controller本身,所以,崩溃!

    经测试,上述想法被印证。

    PS:当然如果能够养成dealloc里把webwebView的delegate设置为nil并停止加载页面,这个问题也就不是问题了。

    Weak is not weak, Strong is not strong!

    随着iOS7快速占据半壁江山,很多应用已经从iOS6,甚至iOS7开始支持,ARC凭借方便的内存管理,很多项目已经默认采用,而在ARC的使用过程中,最常用到的就是对属性@property的修饰:strong、weak,所以,兄弟们要留心,不要犯和我同样的错啊!

  • 相关阅读:
    拖拽改变元素位置或大小bug修复
    拖拽改变元素位置或大小
    vue使用input上传多张图片,可以预览
    javaScript面向对象编程学习(二)
    移动端适配字体大小
    js的时间戳的转换
    vue-cli3.X中的vue.config.js的配置
    javaScript面向对象编程学习(一)
    Visual Studio code 常用插件集集合。
    js的四个小练习
  • 原文地址:https://www.cnblogs.com/BigPolarBear/p/3360998.html
Copyright © 2011-2022 走看看