ios - 用self.collectionView performBatchUpdates: 进行批量修改时的内存泄漏问题
PHPz
PHPz 2017-04-17 17:29:49
0
1
895

我的代码是这样的:

[self.collectionView performBatchUpdates:^{
    
    [self.collectionView deleteItemsAtIndexPaths:deletedIndexpathes];
    if (emptySections.count > 0 ) { // delete empty sections
        [self.sectionNames removeObjectsAtIndexes:emptySections];
        [self.collectionView deleteSections:emptySections];
    }
    
} completion:nil];

根据我的理解, self对要执行的block是强引用,而block里面又对self进行了操作, 所以我觉得这里存在memory Cycle , 应该用weakSelf替换block里面的self,但是我用leak进行测试的时候并没有显示内存泄漏, 搜了网上的类似代码,也没有用weakSelf替换, 这里不存在内存泄漏的问题吗?

PHPz
PHPz

学习是最好的投资!

全部回覆(1)
PHPzhong

self 對要執行的 block 是強引用嗎?不一定是的,如你的例子裡,block 只是作為參數被傳給了collectionView 的performBatchUpdates 方法,collectionView 並沒有持有block 的引用(我沒有源代碼,但是可以猜測一下, collectionView 並沒有必要持有block ),只是作為一個局部變數執行。除非 collectionView 有個 strong 的屬性,在 performBatchUpdates 裡 block 被賦值給了那個 strong 屬性,這樣 collectionView 才會持有一個 block 的強引用。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板