我有一大堆旋轉動畫UIView實例,其內容設置爲各種CGImage,它們都是(並且本質上是需要的)在運行中創建的。它工作得很好,但圖像生成速度很慢(大約1/4秒到1秒 - 即不可接受)。所以我想要做的是非常快速地產生一個低分辨率的近似值(比如1/100秒),並將UIView的CALayer的內容(例如,view.layer.contents
)設置爲快速的低分辨率圖像,並且然後立即產生後臺線程以生成高分辨率版本,以便在準備就緒後立即替換低分辨率版本。在後臺線程上呈現新的UIView圖層內容?
什麼是一些明智的方法來做到這一點?
我的想法是我應該使用GCD(Grand Central Dispatch)安排後臺線程,然後在完成時再次使用它發送消息。如果我這樣做了,發送新的高分辨率替換圖像作爲完成消息的一部分是否合理?
如果我需要取消後臺線程該怎麼辦?如果用戶前往不同的對象,會發生這種情況,在這種情況下,我必須取消當前的後臺任務併爲其他視圖啓動一個新的後臺任務。 (這實際上是一個相當常見的事件,所以我一定要處理它)。我不認爲我可以殺死後臺任務,因爲它可能處於處理CGPath,CGGradient,CGImage等對象的過程中那需要被釋放。另一種可以測試的線程設置標誌的方法有哪些?我應該從主線程向後臺線程發送某種「中止」信號,然後讓背景線程在最舒適的位置自行放棄創建圖像?
從[WWDC 2012](https://developer.apple.com/videos/wwdc/2012/)觀看會話211 - 在iOS上構建併發用戶界面。它有很多信息直接解決你的問題。你可能也想看看會話235和238. – 2012-08-09 03:42:58
很酷,我剛看完#211。可能,NSOperationQueue聽起來像是要走的路。謝謝。 – 2012-08-09 04:46:10
感謝rob mayoff,在觀看Session 211之後,我解決了我的UITableView性能問題! – vampirewalk 2013-03-24 05:26:41