【发布时间】:2013-05-27 10:30:56
【问题描述】:
NSRunLoop 是否是 thread safe or not 我有点困惑。所以我需要澄清一下它是否是线程安全的,为什么?
任何帮助都是可观的。
【问题讨论】:
标签: iphone ios objective-c nsrunloop
NSRunLoop 是否是 thread safe or not 我有点困惑。所以我需要澄清一下它是否是线程安全的,为什么?
任何帮助都是可观的。
【问题讨论】:
标签: iphone ios objective-c nsrunloop
NSRunLoopofficial reference documentation的开头有一个警告:
警告:NSRunLoop 类通常不被认为是线程安全的,它的方法只能在当前线程的上下文中调用。永远不要尝试调用在不同线程中运行的 NSRunLoop 对象的方法,因为这样做可能会导致意外结果。
【讨论】:
NSRunLoop 不是thread safe。更多参考请见Apple's Guidelines。
【讨论】:
不,不是。
阅读NSRunLoop Reference的文档
警告:NSRunLoop 类通常不被认为是 线程安全及其方法只能在上下文中调用 当前线程的。你永远不应该尝试调用 NSRunLoop 对象在不同的线程中运行,因为这样做可能 导致意想不到的结果。
【讨论】:
它不仅不是线程安全的,而且明确地是线程特定的。在NSObjects 之间传递消息的每个线程都必须包含自己的NSRunLoop。访问另一个线程的 runloop 可能会弄乱-autoreleased 对象之类的跟踪循环、NSTimers 之类的定时事件以及-runUntilDate: 之类的子运行循环设置。另外,我假设NSRunLoop 将使用线程特定的数据来存储一些信息。这意味着您可能会导致线程特定数据和对象存储数据之间的数据不匹配。
【讨论】: