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

时间:2011-08-18 05:28:34

标签: objective-c ios multithreading thread-safety

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

3 个答案:

答案 0 :(得分:9)

concurrency programming guide很好。这里有一些非常重要的事情要记住。

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

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

- 如果您正在进行一些非ui上下文的绘制,我相信核心图形现在是线程安全的。 (我相信CATiledLayer因此而做了一些聪明的事情)

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

答案 1 :(得分:4)

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

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

P.S。像Game Kit这样的一些框架有时会在后台执行消息,但它不是关于UI的,而且来自Apple的文档会警告你确保消息是否在主线程上运行。

答案 2 :(得分:0)

Concurrency Programming Guide可能会有所帮助。