【问题标题】:Displaying multiple images causes massive memory usage显示多个图像会导致大量内存使用
【发布时间】:2015-02-06 05:57:19
【问题描述】:

我有一个应用程序,允许用户进入他们的画廊并从他们的照片库中选择照片以添加到应用程序中,它显示在表格视图中

然后将其添加到数组中,在 UIImagePickerController 获取图像后,使用新图像重新加载集合视图。

我的问题是这会占用大量内存。我需要一种方法来显示添加的照片,就像 iPhone 上的原生照片应用一样。

我查看了延迟加载,但我不知道从哪里开始。

有人可以告诉我如何通过延迟加载在 UICollectionView 中显示图像,或者至少减少使用的内存量。

该应用程序通常使用大约 10mb 的内存正常使用。当在 collectionView 中显示大量图像时,这会增加到 50mb+。

谢谢。

【问题讨论】:

  • 创建缩略图并保存。使用imageNamed 作为它的缓存。

标签: ios swift lazy-loading


【解决方案1】:

将高分辨率图像保存到数组中通常会出现问题。此外,在集合视图中为缩略图大小的图像视图使用全分辨率图像是对内存的过度使用。

因此,当用户选择图像时,捕获对该资产 URL 的引用。然后,由于cellForItemAtIndexPath 需要图像,检索图像,将其调整为缩略图尺寸(例如,您可以使用something like this)并在单元格的图像视图中使用它。

如果您想优雅一点,请实现NSCache,您将在其中缓存以前调整大小的图像,但请确保您有合理的保留规则并在内存压力时自行清除。这样,cellForItemAtIndexPath 可以查看图像是否存在于其缓存中,如果存在,则使用它,否则返回资源库并调整该图像的大小。但是通过使用缓存,您可以加快回滚之前调整大小的图像的过程。

但关键是要避免在内存中保存高分辨率图像。如果您甚至要将缩略图保存在内存中,您可能希望以 NSCache 之类的形式而不是数组来捕获它。

【讨论】:

  • 感谢您帮助我更好地理解这一点,感谢您为回答我的问题所付出的努力!:)
猜你喜欢
  • 2016-11-22
  • 2013-02-27
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多