NSRunLoop线程安全吗?

时间:2013-05-27 10:30:57

标签: iphone ios objective-c nsrunloop

我很困惑NSRunLoopthread safe or not。所以我需要一些澄清,它是否是线程安全的,为什么?

任何帮助都很明显。

4 个答案:

答案 0 :(得分:6)

NSRunLoop official reference documentation

的开头有一个警告权
  

警告:NSRunLoop类通常不被认为是线程安全的,并且只能在当前线程的上下文中调用其方法。您永远不应该尝试调用在不同线程中运行的NSRunLoop对象的方法,因为这样做可能会导致意外结果。

答案 1 :(得分:1)

NSRunLoop不是thread safe。有关详细参考,请参阅Apple's Guidelines

答案 2 :(得分:0)

不,不是。

阅读NSRunLoop Reference

中的文档
  

警告:通常不认为NSRunLoop类   线程安全及其方法只应在上下文中调用   当前线程。你永远不应该试着调用一个方法   NSRunLoop对象在不同的​​线程中运行,这样做可能   导致意想不到的结果。

同时检查NSRunLoop answer on SOF

答案 3 :(得分:0)

它不仅不是线程安全的,而且是特定于线程的。在NSObject之间传递消息的每个线程都必须包含自己的NSRunLoop。访问另一个线程的runloop可能会扰乱跟踪的周期,例如-autorelease d个对象,像NSTimer这样的定时事件,以及像-runUntilDate:这样的事件设置的子runloops。另外,我假设NSRunLoop将使用特定于线程的数据来存储一些信息。这意味着您可能导致特定于线程的数据与对象存储数据之间的数据不匹配。