我什么时候需要担心iOS应用程序中的线程安全性?

Thi*_*ilo 7 multithreading objective-c thread-safety ios

在编写通常的视图控制器代码时,我可以假设只从单个事件循环线程调用它吗?我需要什么样的类才能使线程安全?涉及多个线程的常见情况是什么?

Dav*_*dge 9

并发编程指南是好的.这里有一些非常重要的事情需要记住.

- 您应该只从主线程更新UI.这可以让你以微妙的方式...

- NSNotifications将在它们被解雇的主题中收到.因此,如果您启动一个线程并订阅NSNotification来触发UI操作,那么您应该在获取它时检查您所在的线程.如果它不在主线程上,则使用NSObject的performSelectorOnMainThread:withObject:waitUntilDone:在主线程上获取它.

- 如果你正在绘制一些非ui上下文,我相信核心图形现在是线程安全的.(我相信CATiledLayer做了一些聪明的事情因为这个)

- 通常对于视图控制器,您应该考虑的唯一事件循环是主线程上的那个.在另一个线程上创建自己的事件循环之前请三思而后行


xuz*_*zhe 4

如果您正在编写普通的 UIViewController 代码,则无需担心 iOS 中的线程安全性。在 iOS 中,任何有关 UI 的消息都应该在主线程上运行。

如果您自己不在后台执行某些消息,通常情况下,您不必担心线程,在大多数情况下,它将始终在主线程上。

PS 像 Game Kit 这样的一些框架有时会在后台执行消息,但这与 UI 无关,Apple 的文档会警告您确保消息是否在主线程上运行。