2011-02-18 64 views
6

我想知道,什麼是延遲加載的最佳方式。對我來說,我使用的大多數應用程序都是解析並從服務器獲取URL並將圖像放入表視圖中。所以我實現了延遲加載來提高應用程序的性能。現在我想知道延遲加載圖像的最佳方法。因爲我已經使用延遲加載到四種方式,什麼是在iPhone中延遲加載圖像的最佳方式?

  • 懶惰從蘋果developer.com加載圖像

  • 實現異步方法對於提高延遲加載

  • 用於處理單獨的主線程下載的圖像。

  • 已使用ECOImageLoadingDemo應用程序進行延遲加載。

但我已經使用了上述四種方法來實現延遲加載。但我想知道什麼是延遲加載的最佳方法。哪一個最適合表現明智和記憶明智的適合呢?

在此先感謝。

問候,

Pugal

回答

4

從我的經驗,性能和內存方面的解決方案都在滑塊的兩端。您可以在這兩者之間的某個地方移動解決方案,但缺點是具有性能最佳的解決方案,通常意味着更好的解決方案內存方式,反之亦然。我希望我解釋不夠清楚這個:)

這裏是我如何處理延遲加載圖片的問題:

在我的應用程序創建一個實體,我叫GlobalImageProvider。所有圖像請求都通過這個實體。通過這種方式,我可以控制多少個線程用於下載,並且我可以實現緩存系統(內存+本地磁盤),這些對於應用程序和完全控制都是完全透明的。通過控制緩存的大小,我可以控制應用程序的感受。在性能方面,沒有什麼比已經在內存中創建了UIImage。 內存方面,你甚至可以選擇禁用緩存。

更重要的是,我甚至可以在應用程序運行時動態地改變線程的數量,這取決於我擁有的網絡的質量。

爲了使在線請求,我使用NSURLConnection,但我打算切換到別的東西,因爲我讀過它泄漏內存。


在視圖&控制器方面,我有一個AsyncImageView這僅僅是一個UIImageView知道如何與GlobalImageProvider工作。它知道在加載時顯示一個活動指示器,並且可以處理來自GlobalImageProvider的響應。
如果您知道所需圖像的URL,則只需在屏幕上添加AsyncImageView,然後向GlobalImageProvider發送請求,並使用AsyncImageView作爲該圖像的「處理程序」。

如果您不喜歡將數據與圖像視圖混合,則可以在GlobalImageProvider和AsyncImageView之間添加ViewController。他獲取圖像響應並將其放入ImageView中。

就是這樣,希望它能幫助你一點。