IOS block 给自己买的坑

给自己埋得坑,含泪吞下

昨天改一个小的BUG,由于使用了block,不小心改一个新的BUG 来,debug好久才找到罪魁祸首。

我们都知道 再使用block的时候一定要小心循环引用,我们大部分同学也知道在使用了block的时候如果要修改block内部也使用了的外部变量的时候,这里一定要小心。变量前没加__block来修饰 的时候,某些变量是没法修改的(为什么说是某些,这个大家可以翻阅block的相关知识),block会记录传入时候的之,block内部就一直使用这个值,即使你在外部修改了也不管用。

而我呢明明知道却也犯了这样的错误。我的情况是怎么样的呢:

在使用tableView的时候由于两个界面是完全一样的而且在同一界面上。我为了复用cell 所以这个 cell是两个界面复用的。但是这个cell 就有个block。而且重点是我要在这个block中修改外部对象属性。问题来了,我是修改第二份界面的数据,但是一刷新我发先还是原来的之。最后发现修改第二个界面的对象,第二个界面内容没改变。相反的是第一个界面内容改变了。我顿时就 方了。最后一步步发现 block内部的对象的内存地址和外部的不一样,  哈哈 瞬间就明白了。block内部记录了我第一次传入的对象,所以就会出现这个bug 。然后就好解决了。

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

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,202评论 30 471
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,790评论 1 92
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,242评论 1 23
  • 《Objective-C高级编程》这本书就讲了三个东西:自动引用计数、block、GCD,偏向于从原理上对这些内容...
    WeiHing阅读 9,883评论 10 69
  • 很高兴参加了“我在简书过鸡年——万人万字,请接棒!”的专题活动。转眼活动在倒数了,昨晚睡下回想,从第一篇开始到十一...
    快乐的玲欣阅读 341评论 1 1