0

我知道作爲一般指導,您應始終在主線程上執行GUI更新。但有時並不那麼明顯。例如,我應該在哪裏執行呼叫:Cocoa-Touch - 有關執行GUI更新的線程指南

setBadgeValue:UITabBarItem

或者

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]

在它沒有規定是否這些方法可以在非主線程運行的類引用。

回答

2

一般規則是你應該保持UIKit更新到主線程,除非UIKit通過你的實現從另一個線程調用。

參考Important: The UIKit classes are generally not thread safe. All drawing-related operations should be performed on your application’s main thread.

From iOS 4 release notes:

  • 繪製在UIKit的圖形上下文現在是線程安全的。具體來說: 用於訪問和操作圖形上下文的例程現在可以正確處理駐留在不同線程上的上下文。
  • 字符串和圖像繪製現在是線程安全的。
  • 在多個線程中使用顏色和字體對象現在可以安全地使用。

有了這些信息,除非我或別人挖了更多的文檔(這是我掃描的發行說明,並沒有看到更多):

一個UITabBarItem的setBadgeValue:

假設只從主線程調用是安全的。

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES] 

假設只從主線程調用是安全的。

+0

不應該在非主線程上運行不意思? –

+0

@Peter答案澄清/更新 – justin

+0

感謝賈斯汀,雖然在發行說明中我看不到有關調用主(或非主)線程的任何信息?只有它是線程安全的? –

0

不妨在主線程中調用它們以確保它的正確性。