我的代码是这样的:
[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替换, 这里不存在内存泄漏的问题吗?
PHPz2017-04-17 17:31:49
self는 실행될 블록에 대한 강력한 참조입니까? 반드시 그런 것은 아닙니다. 귀하의 예에서는 블록이 collectionView의 PerformBatchUpdates 메소드에 매개변수로 전달됩니다. CollectionView는 블록에 대한 참조를 보유하지 않습니다(소스 코드는 없지만 collectionView가 블록을 보유할 필요는 없다고 추측할 수 있습니다). ), 지역 변수로 실행되었습니다. collectionView에 강력한 속성이 없으면 블록은 PerformBatchUpdates의 해당 강력한 속성에 할당되므로 collectionView는 블록에 대한 강력한 참조를 보유하게 됩니다.