NSOperationQueue的主题是父母的主题还是新主题呢?

时间:2015-09-21 19:22:32

标签: objective-c multithreading cocoa nsoperationqueue

如果我实例化一个NSOperationQueue(清单1):

NSOperationQueue * operationQueue = [[NSOperationQueue alloc] init];

然后向它添加一个操作(清单2):

NSInvocationOperation* anOperation = [[NSInvocationOperation alloc] initWithInvocation:theInvocation];
[operationQueue  addOperation:anOperation ];

我知道anOperation将在新线程的新NSOperationQueue上运行。与之通信的一种机制是调用performSelector:onThread:withObject:waitUntilDone:

但这是除了主要的队列和线程之外的NSOperation。 NSOperationQueue对象怎么样?作为alloc / init的一部分,它会移动到创建它的线程以外的线程吗?换句话说,如果在主队列和主线程上执行了NSOperationQueue alloc / init代码(清单1),我可以使用performSelectorOnMainThread:withObject:waitUntilDone:或者我是否必须使用performSelector:onThread:withObject:waitUntilDone:?< / p>

我无法找到关于此的任何信息,或者正是NSOperationQueue init所做的事情,这就是为什么我想编写代码来记录创建/使用的各种队列和线程。

1 个答案:

答案 0 :(得分:2)

没有与<p:messages>相关联的特定线程。 NSOperationQueue的代码在任何调用它的线程上运行。

对象本身是线程安全的,可以从任何线程访问或操作。来自NSOperationQueue class reference

  

多核注意事项

     

可以安全地使用来自多个线程的单个<p:messages>对象,而无需创建额外的锁来同步对该对象的访问。