许多帖子都说UIKit完全不是线程安全的。现在在GCD的Apple文档中,我们可以看到它是不是线程安全的DRAWING。那么这样的代码就可以了:
dispatch_async(^ {
//do some work if(!self.window.rootViewController.presentedViewController && ) [self.window.rootViewController class] == anotherClass) { dispatch_async(dispatch_get_main_queue(), ^{ //do some work }); }
});
答案 0 :(得分:2)
我个人认为,到目前为止你所听到的内容都是误导性的。
以下是来自Apple UIKit Framework Reference的报价,归功于类似的帖子here:
注意:在大多数情况下,UIKit类只能用于 应用程序的主要线程。对于课程尤其如此 源自UIResponder或涉及操纵你的 应用程序的用户界面。
此外,请注意,根据release notes found here,从iOS4开始,与您的假设相反,
在UIKit中绘制图形上下文现在是线程安全的。 具体来说:
- 用于访问和操作图形上下文的例程现在可以正确处理驻留在不同线程上的上下文。
- 字符串和图像绘制现在是线程安全的。
- 现在可以安全地使用多个线程中的颜色和字体对象。
事实上,在WWDC 2012会话“构建并发用户界面”中,Apple工程师演示了在后台线程中绘制图像图形上下文。
我的外卖:
答案 1 :(得分:0)
在这个例子中,你没有改变任何值,所以是的,没关系。从后台线程更新UI不是。