cari

Rumah  >  Soal Jawab  >  teks badan

ios - 用self.collectionView performBatchUpdates: 进行批量修改时的内存泄漏问题

我的代码是这样的:

[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替换, 这里不存在内存泄漏的问题吗?

PHPzPHPz2888 hari yang lalu943

membalas semua(1)saya akan balas

  • PHPz

    PHPz2017-04-17 17:31:49

    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.

    balas
    0
  • Batalbalas