显示多个图像会导致大量内存使用

Displaying multiple images causes massive memory usage

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

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

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

上的原生照片应用程序一样

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

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

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

谢谢。

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

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

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

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