検索

ホームページ  >  に質問  >  本文

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

PHPzPHPz2773日前888

全員に返信(1)返信します

  • PHPz

    PHPz2017-04-17 17:31:49

    self は実行されるブロックへの強い参照ですか?あなたの例では、ブロックは単にcollectionViewのperformBatchUpdatesメソッドにパラメータとして渡されるだけです。CollectionViewはブロックへの参照を保持しません(ソースコードはありませんが、collectionViewはブロックを保持する必要がないことは推測できます)。 )、ローカル変数として実行されるだけです。 collectionView が強い属性を持っていない限り、block は、performBatchUpdates でその強い属性に割り当てられるため、collectionView は block への強い参照を保持します。

    返事
    0
  • キャンセル返事