我有一个应用程序,允许用户进入他们的图库并从他们的照片库中选择照片添加到应用程序,它显示在tableview
然后将其添加到一个数组中,该数组在UIImagePickerController获取图像后,使用新图像重新加载集合视图。
我的问题是这会占用大量内存。我需要一种方法来显示添加的照片,就像iPhone上的原生照片应用程序一样。
我看了很懒,但我不知道从哪里开始。
有人可以告诉我如何在延迟加载的UICollectionView中显示图像,或者至少减少使用的内存量。
该应用程序通常使用大约10mb的内存正常使用。当在collectionView中显示大量图像时,这增加到50mb +。
感谢。
答案 0 :(得分:1)
将高分辨率图像保存到阵列中通常会有问题。此外,在集合视图中使用缩放图像视图的全分辨率图像是对内存的过度使用。
因此,当用户选择图像时,捕获对该资产的URL的引用。然后,由于cellForItemAtIndexPath
需要图像,请检索图像,将其大小调整为缩略图尺寸(例如,您可以使用something like this)并在单元格的图像视图中使用它。
如果你想要优雅,可以实现一个NSCache
,你可以在其中缓存以前调整过的图像,但要确保你有合理的保留规则,并在内存压力下自行清除。这样,cellForItemAtIndexPath
可以查看图像是否存在于其缓存中,如果存在,则使用该图像,否则返回资源库并调整该图像的大小。但是通过使用缓存,您可以加快向后滚动以前调整过的图像的过程。
但关键是要避免在内存中保存高分辨率图像。如果你要在内存中保留缩略图,你可能想要用NSCache
而不是数组来捕获它。