從我的經驗,性能和內存方面的解決方案都在滑塊的兩端。您可以在這兩者之間的某個地方移動解決方案,但缺點是具有性能最佳的解決方案,通常意味着更好的解決方案內存方式,反之亦然。我希望我解釋不夠清楚這個:)
這裏是我如何處理延遲加載圖片的問題:
在我的應用程序創建一個實體,我叫GlobalImageProvider。所有圖像請求都通過這個實體。通過這種方式,我可以控制多少個線程用於下載,並且我可以實現緩存系統(內存+本地磁盤),這些對於應用程序和完全控制都是完全透明的。通過控制緩存的大小,我可以控制應用程序的感受。在性能方面,沒有什麼比已經在內存中創建了UIImage
。 內存方面,你甚至可以選擇禁用緩存。
更重要的是,我甚至可以在應用程序運行時動態地改變線程的數量,這取決於我擁有的網絡的質量。
爲了使在線請求,我使用NSURLConnection
,但我打算切換到別的東西,因爲我讀過它泄漏內存。
在視圖&控制器方面,我有一個AsyncImageView
這僅僅是一個UIImageView
知道如何與GlobalImageProvider
工作。它知道在加載時顯示一個活動指示器,並且可以處理來自GlobalImageProvider
的響應。
如果您知道所需圖像的URL,則只需在屏幕上添加AsyncImageView
,然後向GlobalImageProvider
發送請求,並使用AsyncImageView
作爲該圖像的「處理程序」。
如果您不喜歡將數據與圖像視圖混合,則可以在GlobalImageProvider和AsyncImageView之間添加ViewController。他獲取圖像響應並將其放入ImageView中。
就是這樣,希望它能幫助你一點。