2012-02-18 319 views
0

我有一個網頁加載的圖像網格,但滾動時會有一點滯後/斷鏈。我使用異步ASIHTTPRequest來發出請求,所以下載本身發生在一個單獨的線程中,但由於UIKit不是線程安全的,一旦我收到NSData響應,我必須在主線程上調用UIImage initWithData在iPhone上異步加載圖像

分析顯示,到目前爲止,瓶頸由UIImage initWithData調用的內部PNG解析函數組成。我感興趣的是在後臺線程中這樣做,所以主UI保持響應並且滯後較少。

但我不確定如何做到這一點。聽起來像正確的方向是使用CGImageRef,因爲核心圖形是線程安全的,但我只看到CGImageCreateWithPNGDataProviderCGImageCreateWithJPEGGDataProvider,而UIImage initWithData支持大量的圖像類型列表。

我想要的東西與UIImage initWithData具有相同的功能,但沒有線程安全問題。

回答

-1

您可以安全地在後臺線程中調用UIImageinitWithData。作爲一個很好的經驗法則,你在後臺線程中不能做的是改變用戶界面元素。在這種情況下,您不應該設置UIImageViewimage屬性,或者在後臺線程中將超級視圖添加UIImageView

但是,創建一個UIImage實例是安全的,並且可以毫無問題地工作。

+0

謝謝。你知道文檔是否指定這是好的嗎? – Bill 2012-02-18 17:45:56

+0

老實說,我不知道它是否在文檔中。不過,我從來沒有遇到過這個問題。 – pgb 2012-02-19 00:15:12