我提前道歉,因为这可能是一个愚蠢的菜鸟问题......
我使用 SDWebImage 在我的 cellForRowAtIndexPath 方法中的 UITableView 中显示图片,使用经典
[cell.pointPicture setImageWithURL:[NSURL URLWithString:thePoint.imageURL] placeholderImage:[UIImage imageNamed:POINT_DEFAULT_IMAGE]];
(显示的图片是轻巧且压缩良好的 jpg,只是一些 ko,是的,我当然使用 dequeueReusableCellWithIdentifier)。
当我使用“Instrument - Allocations”检查我的应用程序并向下滚动我的 UITableView(有 40 个包含图片的单元格,有点像 Instagram)时,我使用了大量内存! (见截图)
但它似乎是“VM”,尤其是来自 coreGraphics 库的“VM:CG 光栅数据”。
所以问题是:
- 是否正常?
- 这是一个严重的问题吗?
- 有没有办法避免这种情况?
很抱歉,在网上搜索了几次之后,我找不到任何关于“VM: CG raster data”的相关信息……有什么想法吗?提前致谢!
最佳答案
我遇到了同样的问题并找到了根本原因,至少在我的实现过程中是这样。
根本原因
根本原因是我的表格单元格存储了一个指向存储在 SDWebImage 缓存中的图像的 strong 指针。这个strong 指针,导致SDWebImage removeAllObjects
的内存释放函数在收到来自iOS 的内存警告时不释放任何内存。
解决方案 1 - 在 ViewController 中保留 weak
指针,只允许 SDWebImage 保留指向所有 UIImage
对象的强指针。
解决方案 2 - 实现 - (void)prepareForReuse
并将图像指针设置为 nil
要测试此解决方案,请运行您的应用程序并模拟内存警告 - 您将能够看到已删除的数据
关于ios - SDWebImage - UITableView 中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19620059/