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

我的代码是这样的:

[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

学习是最好的投资!

membalas semua(1)
PHPzhong

Adakah diri rujukan kukuh kepada blok yang akan dilaksanakan? Tidak semestinya. Dalam contoh anda, blok hanya diluluskan sebagai parameter kepada kaedah performBatchUpdates CollectionView tidak memegang rujukan untuk menyekat (saya tidak mempunyai kod sumber, tetapi saya boleh meneka bahawa collectionView tidak perlu menahan blok. ), hanya dilaksanakan sebagai pembolehubah tempatan. Melainkan collectionView mempunyai atribut yang kuat, blok diberikan kepada atribut kuat itu dalam performBatchUpdates, supaya collectionView akan memegang rujukan yang kuat untuk menyekat.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan