2010-02-06 40 views
0

我正在嘗試使用NSThread加載數千幅圖像,但性能很慢。iPhone:使用NSThread加載數千張圖像的最佳實踐?

使用NSThread下載數以千計的圖像的最佳做法是什麼?

謝謝,
吉姆。

+2

NSThread本身並沒有讓任何東西變慢。您是否使用過Shark或樂器來查找您的應用程序在哪些地方花費CPU週期? – Costique 2010-02-06 11:33:13

+0

取決於你的目標是什麼 - 在加載所有1,000張圖片時是重要的事情,還是可以先找出你需要的圖片並在其他997加載時顯示有用的東西? – 2010-02-06 18:54:47

+0

David,我嘗試了你提到的方式。我正在下載applicationLaunch Successfully後廣泛使用的一些圖像。我可以看到,我的應用程序性能肯定增加了。 非常感謝。 – Jim 2010-02-08 06:29:08

回答

3

NSThread不是問題。這聽起來像你可能簡單地壓倒iPhone的硬件。請記住,即使是最慢的筆記本電腦,移動平臺的功耗也只有一小部分。

看看照片應用程序在圖像中有時會如何模糊淡入淡出。有時候,它也必須用縮略圖來完成。顯示圖形密集型網頁可能需要10-20秒的時間。

這聽起來像你需要重新考慮你的設計。除非你正在加載微小的圖像,否則你根本不會在iPhone硬件上及時加載「成千上萬」的圖像。您需要在顯示時加載。邏輯上將圖像分成組,然後讓用戶導航到他們想要的組,然後只加載那個小組。

+0

是的這是真的NSThread不是問題。我再次想到了設計,現在新的設計應用看起來不錯。非常感謝。 – Jim 2010-02-08 06:32:37

1

如果您通過http下載圖片,我建議您使用ASIHTTPRequest框架。它可以輕鬆下載異步的HTML,圖像和其他東西。

但是,請注意不要同時下載到很多東西。我已經閱讀某處那10個http連接在同一時間應該是一個很好的數額。 (Somewhere是由jonkean在他的commit中設置的AppSales-Mobile項目ReviewUpdater.h的值)

3

還考慮使用NSOperationQueue來協調這些下載。使用NSOperationQueueNSOperation類,您可以時間表千次下載,但要確保只有一定量的下載同時發生。

要獲得積分,請使用Reachability API查看用戶是否在3G或Wifi上,並根據該數據設置併發下載數。