是performSelector:onThread:withObject:waitUntilDone:ordered?

时间:2014-02-07 21:08:52

标签: objective-c multithreading cocoa nsobject nsrunloop

我有一个Objective-C类,它会旋转后台线程并在其上运行NSRunLoop。我想从主线程向后台线程传递消息(是的,完全来自主线程)。为此,我计划使用内置的performSelector:onThread:withObject:waitUntilDone:

我想知道是否可以安全地假设我以这种方式发送消息的顺序将是他们在后台线程上接收的顺序。显然,如果多个线程几乎同时调用performSelector:onThread:withObject:waitUntilDone:,那么问题就没有问题,但由于我只是从主线程调用它,我保证有序排队吗?

1 个答案:

答案 0 :(得分:2)

根据Apple的文档:

  

此方法使用默认的运行循环模式(即与NSRunLoopCommonModes常量关联的模式)在目标线程的运行循环上对消息进行排队。作为其正常运行循环处理的一部分,目标线程使消息出列(假设它在一个默认的运行循环模式下运行)并调用所需的方法。

队列通常是有序数据结构。事实上,它没有声明它可以按任何顺序执行,这意味着它们将按顺序执行。