ios - 用self.collectionView performBatchUpdates: 进行批量修改时的内存泄漏问题
PHPz
PHPz 2017-04-17 17:29:49
[iOS讨论组]

我的代码是这样的:

[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)
PHPz

self 对要执行的 block 是强引用吗?不一定是的,如你的例子里,block 只是作为参数被传给了 collectionView 的 performBatchUpdates 方法,collectionView 并没有持有 block 的引用(我没有源代码,但是可以猜测一下, collectionView 并没有必要持有 block),只是作为一个局部变量执行。除非 collectionView 有个 strong 的属性,在 performBatchUpdates 里 block 被赋值给了那个 strong 属性,这样 collectionView 才会持有一个 block 的强引用。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号