2015-02-05 51 views
0

我有一個應用程序,允許用戶進入他們自己的相冊,然後從他們的照片庫中的照片添加到應用程序,它顯示在tableview中顯示多張圖像會導致大量的內存使用情況

這是加入到UIImagePickerController獲取圖像後的數組中,使用新圖像重新加載集合視圖。

我的問題是,這使用大量的內存。我需要一種方式來顯示與iPhone上的原生照片應用完全相同的照片。

我看了懶惰加載,但我不知道從哪裏開始。

是否有人可以告訴我如何在延遲加載的UICollectionView中顯示圖像,或者至少減少使用的內存量。

該應用程序通常在正常使用,使用大約10MB的內存。在collectionView中顯示多個圖像時,這會增加到50mb +。

謝謝。

+0

創建縮略圖並保存。使用['imageNamed'](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImage_Class/index.html#//apple_ref/occ/clm/UIImage/imageNamed :)作爲其緩存。 – 2015-02-05 18:45:48

回答

1

將高分辨率圖像保存到數組通常會有問題。此外,在集合視圖中使用縮略圖大小圖像視圖的全分辨率圖像是對存儲器的過度使用。

因此,當用戶選擇圖像時,捕獲對該資產的URL的引用。然後,由於cellForItemAtIndexPath需要圖像,請檢索圖像,將其調整爲縮略圖尺寸(例如,您可以使用something like this)並將其用於單元格的圖像視圖中。

如果您想對它進行優雅處理,請實施一個NSCache,您可以在其中緩存以前調整大小的圖像,但要確保您有合理的保留規則,並在內存壓力下自行清除。這樣,cellForItemAtIndexPath可以查看圖像是否存在於其緩存中,如果是,則使用該圖像,否則返回資產庫並調整圖像大小。但通過使用緩存,您可以加快通過以前調整大小的圖像回滾的過程。

但關鍵是要避免在內存中保留高分辨率圖像。如果你要在內存中保留縮略圖,你可能想要捕獲它,像NSCache而不是數組。

+0

感謝您幫助我更好地理解這一點,並感謝您爲回答我的問題付出的努力!:) – 2015-02-05 22:22:29

相關問題