Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 可可触感&x2013;关于执行GUI更新的线程的指导原则_Objective C_Multithreading_Cocoa Touch_User Interface_Grand Central Dispatch - Fatal编程技术网

Objective c 可可触感&x2013;关于执行GUI更新的线程的指导原则

Objective c 可可触感&x2013;关于执行GUI更新的线程的指导原则,objective-c,multithreading,cocoa-touch,user-interface,grand-central-dispatch,Objective C,Multithreading,Cocoa Touch,User Interface,Grand Central Dispatch,我知道作为一个一般的指导原则,您应该始终在主线程上执行GUI更新。但有时并不那么明显。例如,我应该在哪里执行呼叫: setBadgeValue:uitabaritem的 或 [[UIApplication sharedApplication]设置网络活动指示器可见:是] 在类引用中,没有指定这些方法是否可以在非主线程上运行。最好在主线程上调用它们,以确保安全。一般规则是,您应该将UIKit更新保存到主线程,除非UIKit通过您的实现从另一个线程调用 [[UIApplication sharedA

我知道作为一个一般的指导原则,您应该始终在主线程上执行GUI更新。但有时并不那么明显。例如,我应该在哪里执行呼叫:

setBadgeValue:
uitabaritem

[[UIApplication sharedApplication]设置网络活动指示器可见:是]


在类引用中,没有指定这些方法是否可以在非主线程上运行。

最好在主线程上调用它们,以确保安全。

一般规则是,您应该将UIKit更新保存到主线程,除非UIKit通过您的实现从另一个线程调用

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]
参考

  • 在UIKit中绘制图形上下文现在是线程安全的。明确地: 用于访问和操作图形上下文的例程现在可以正确处理驻留在不同线程上的上下文
  • 字符串和图像绘图现在是线程安全的
  • 在多个线程中使用颜色和字体对象现在是安全的
有了这些信息,除非我或其他人找到更多的文档(我扫描了发行说明,没有看到更多的文档):

setBadgeValue:
一个UITabBarItem

假设只从主线程调用是安全的

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]

假设只从主线程调用是安全的。

谢谢Justin,尽管在发行说明中我看不到任何关于调用主线程(或非主线程)的信息?只是它是线程安全的吗?@Peter是的,苹果没有详细说明它,或者在我看来不够大胆,他们也有一些例外,但他们确实没有正确地详细说明什么是好的,什么是不好的。因此,您只需假设这不是因为线程问题和特定版本的问题,如果您试图与系统抗争,就没有乐趣,从而确保安全。OSX也是如此(在这方面进展缓慢)。一般的假设是,除非明确记录,否则它是不安全的。另外:答案中增加了参考资料。“线程安全”对不同的人意味着不同的东西,甚至在苹果的文档中也意味着不同的东西。在我的经验中,除非DOC显式地声明否则,如果一个类从UI开始(即UIKIT中的所有内容),则应该将其视为仅为主线程。详情如下:
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]