如果我实例化一个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所做的事情,这就是为什么我想编写代码来记录创建/使用的各种队列和线程。
答案 0 :(得分:2)
没有与<p:messages>
相关联的特定线程。 NSOperationQueue的代码在任何调用它的线程上运行。
对象本身是线程安全的,可以从任何线程访问或操作。来自NSOperationQueue
class reference:
多核注意事项
可以安全地使用来自多个线程的单个
<p:messages>
对象,而无需创建额外的锁来同步对该对象的访问。