給自己埋得坑唆貌,含淚吞下
昨天改一個(gè)小的BUG起趾,由于使用了block胰挑,不小心改一個(gè)新的BUG 來,debug好久才找到罪魁禍?zhǔn)住?/p>
我們都知道 再使用block的時(shí)候一定要小心循環(huán)引用杠纵,我們大部分同學(xué)也知道在使用了block的時(shí)候如果要修改block內(nèi)部也使用了的外部變量的時(shí)候荠耽,這里一定要小心。變量前沒加__block來修飾 的時(shí)候比藻,某些變量是沒法修改的(為什么說是某些铝量,這個(gè)大家可以翻閱block的相關(guān)知識(shí))伊履,block會(huì)記錄傳入時(shí)候的之,block內(nèi)部就一直使用這個(gè)值款违,即使你在外部修改了也不管用唐瀑。
而我呢明明知道卻也犯了這樣的錯(cuò)誤。我的情況是怎么樣的呢:
在使用tableView的時(shí)候由于兩個(gè)界面是完全一樣的而且在同一界面上插爹。我為了復(fù)用cell 所以這個(gè) cell是兩個(gè)界面復(fù)用的哄辣。但是這個(gè)cell 就有個(gè)block。而且重點(diǎn)是我要在這個(gè)block中修改外部對(duì)象屬性赠尾。問題來了力穗,我是修改第二份界面的數(shù)據(jù),但是一刷新我發(fā)先還是原來的之气嫁。最后發(fā)現(xiàn)修改第二個(gè)界面的對(duì)象当窗,第二個(gè)界面內(nèi)容沒改變。相反的是第一個(gè)界面內(nèi)容改變了寸宵。我頓時(shí)就 方了崖面。最后一步步發(fā)現(xiàn) block內(nèi)部的對(duì)象的內(nèi)存地址和外部的不一樣, ?哈哈 瞬間就明白了梯影。block內(nèi)部記錄了我第一次傳入的對(duì)象巫员,所以就會(huì)出現(xiàn)這個(gè)bug 。然后就好解決了甲棍。