给自己埋得坑,含泪吞下
昨天改一个小的BUG,由于使用了block,不小心改一个新的BUG 来,debug好久才找到罪魁祸首。
我们都知道 再使用block的时候一定要小心循环引用,我们大部分同学也知道在使用了block的时候如果要修改block内部也使用了的外部变量的时候,这里一定要小心。变量前没加__block来修饰 的时候,某些变量是没法修改的(为什么说是某些,这个大家可以翻阅block的相关知识),block会记录传入时候的之,block内部就一直使用这个值,即使你在外部修改了也不管用。
而我呢明明知道却也犯了这样的错误。我的情况是怎么样的呢:
在使用tableView的时候由于两个界面是完全一样的而且在同一界面上。我为了复用cell 所以这个 cell是两个界面复用的。但是这个cell 就有个block。而且重点是我要在这个block中修改外部对象属性。问题来了,我是修改第二份界面的数据,但是一刷新我发先还是原来的之。最后发现修改第二个界面的对象,第二个界面内容没改变。相反的是第一个界面内容改变了。我顿时就 方了。最后一步步发现 block内部的对象的内存地址和外部的不一样, 哈哈 瞬间就明白了。block内部记录了我第一次传入的对象,所以就会出现这个bug 。然后就好解决了。