ios - SDWebImage - UITableView 中的内存泄漏?

标签 ios uitableview memory-management memory-leaks sdwebimage

我提前道歉,因为这可能是一个愚蠢的菜鸟问题......

我使用 SDWebImage 在我的 cellForRowAtIndexPath 方法中的 UITableView 中显示图片,使用经典

[cell.pointPicture setImageWithURL:[NSURL URLWithString:thePoint.imageURL] placeholderImage:[UIImage imageNamed:POINT_DEFAULT_IMAGE]];

(显示的图片是轻巧且压缩良好的 jpg,只是一些 ko,是的,我当然使用 dequeueReusableCellWithIdentifier)。

当我使用“Instrument - Allocations”检查我的应用程序并向下滚动我的 UITableView(有 40 个包含图片的单元格,有点像 Instagram)时,我使用了大量内存! (见截图)

instrument allocation screenshot

但它似乎是“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/

相关文章:

ios - 如何从 web 获取 base64 并在 Swift 中解码?

uitableview - 如何从@IBAction 中调用 TableView 函数

ios - 在 UISearchDisplayController 后面重新加载 UITableView

ios - 当我在滚动 UITableview 期间显示文档目录中的图像时,内存不断增加然后应用程序崩溃

c++ - 在 C++ 中分配内存然后在 Cython 中释放它?

ios - 关于更新 UISlider 值的问题......

ios - 为 View 的子部分定义操作

ios - 如何等到在 objective-c 中按下 CCMenuItemImage?

ios - 在同一列表/表格 View 中显示缓存的服务器联系人和本地 iOS 联系人

java - 不关闭 stringwriter 会导致泄漏吗?