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

不妨在主线程中调用它们以确保它的正确性。