2011-08-18 99 views

回答

4

如果您正在編寫普通的UIViewController代碼,則無需擔心iOS中的線程安全問題。在iOS中,任何有關UI的消息都應該在主線程上運行。

如果你不在自己的背景中執行一些消息,通常你不必擔心線程,在大多數情況下,它總是在主線程中。

P.S.像Game Kit這樣的一些框架有時會在後臺執行消息,但不是關於UI,Apple的文檔會警告您確定消息是否在主線程上運行。

+0

一些繪圖代碼是多線程的,例如在多核CPU上運行時的CATiledLayer。 –

9

concurrency programming guide很好。以下是一些需要記住的重要事項。

- 您應該只從主線程更新UI。這可以讓你以微妙的方式...

- NSNotifications將在它們被觸發的線程中收到。所以如果你啓動一個線程並訂閱一個NSNotification來觸發一個UI動作,你應該在你得到它時檢查你的線程。如果它不在主線程上,請使用NSObject的performSelectorOnMainThread:withObject:waitUntilDone:在主線程上獲取它。

- 如果你正在繪製一個非UI的上下文,我相信核心圖形現在是線程安全的。 (我相信CATiledLayer會因此而做一些聰明的事情)

- 通常對於視圖控制器來說,唯一需要考慮的事件循環就是主線程上的循環。在另一個線程上創建自己的事件循環之前,請三思。

+0

爲了確認,Core Graphics是線程安全的,並且CATiledLayer完成了它在多個後臺線程中的繪圖(如果您擁有單個核心CPU,則只有一個後臺線程)。 –