我什么时候需要担心iOS应用程序中的线程安全?
在编写通常的视图控制器代码时,我可以假设这只会从一个事件循环线程中调用吗? 我需要什么样的类来使线程安全? 涉及多个线程的通常情况是什么?
如果您正在编写普通的UIViewController代码,则无需担心iOS中的线程安全问题。 在iOS中,任何有关UI的消息都应该在主线程上运行。
如果你不自己在后台执行一些消息,通常你不必担心线程,在大多数情况下,它总是在主线程上。
PS像Game Kit这样的一些框架有时候会在后台执行消息,但不是关于UI,苹果的文档会警告你确定消息是否在主线程上运行。
并发编程指南很好。 这里有一些超级重要的事情要记住。
– 你应该只从主线程更新UI。 这可以让你以微妙的方式
NSNotifications将被接收到它们被触发的线程中。 所以,如果你启动一个线程并订阅一个NSNotification来触发一个UI动作,你应该在你得到它的时候检查你的线程。 如果它不在主线程上,请使用NSObject的performSelectorOnMainThread:withObject:waitUntilDone:在主线程上获取它。
– 如果你正在绘制一个非UI的上下文,我相信核心graphics现在是线程安全的。 (我相信CATiledLayer会因为这个而做一些聪明的事情)
– 通常对于视图控制器来说,唯一需要考虑的事件循环就是主线程中的一个。 在另一个线程上创build自己的事件循环之前,请考虑两次
并发编程指南可能会有所帮助。