[英]Do I need to worry about different contexts in NSNotification Observers
[英]When do I need to worry about thread-safety in an iOS application?
在编写通常的视图控制器代码时,我可以假设只从单个事件循环线程调用它吗? 我需要什么样的类才能使线程安全? 涉及多个线程的常见情况是什么?
并发编程指南很好。 这里有一些非常重要的事情需要记住。
- 您应该只从主线程更新UI。 这可以让你以微妙的方式...
- NSNotifications将在它们被解雇的主题中收到。 因此,如果您启动一个线程并订阅NSNotification来触发UI操作,那么您应该在获取它时检查您所在的线程。 如果它不在主线程上,则使用NSObject的performSelectorOnMainThread:withObject:waitUntilDone:在主线程上获取它。
- 如果你正在绘制一些非ui上下文,我相信核心图形现在是线程安全的。 (我相信CATiledLayer做了一些聪明的事情因为这个)
- 通常对于视图控制器,您应该考虑的唯一事件循环是主线程上的那个。 在另一个线程上创建自己的事件循环之前请三思而后行
如果您正在编写普通的UIViewController代码,则无需担心iOS中的线程安全性。 在iOS中,任何有关UI的消息都应该在主线程上运行。
如果你自己不在后台执行某些消息,通常,你不必担心线程,在大多数情况下,它总是在主线程上。
PS一些像Game Kit这样的框架有时会在后台执行消息,但它不是关于UI的,而且来自Apple的文档会警告你确保消息是否在主线程上运行。
并发编程指南可能会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.