gpt4 book ai didi

objective-c - NSOperationQueue 的线程是父线程还是新线程?

转载 作者:行者123 更新时间:2023-12-03 17:02:01 30 4
gpt4 key购买 nike

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

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

然后向其添加一个操作( list 2):

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

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

但这是队列和线程上的 NSOperation,而不是主线程。那么 NSOperationQueue 对象呢?作为 alloc/init 的一部分,它是否会移动到创建它的线程以外的线程?换句话说,如果 NSOperationQueue alloc/init 代码( list 1)在主队列和主线程上执行,我可以使用 PerformSelectorOnMainThread:withObject:waitUntilDone: 还是必须使用 PerformSelector:onThread:withObject:waitUntilDone: ?

我无法找到任何关于此的信息,或者确切地说 NSOperationQueue init 做了什么,这就是为什么我正在考虑编写代码来记录创建/使用的各种队列和线程。

最佳答案

没有与 NSOperationQueue 关联的特定线程。 NSOperationQueue 的代码在调用它的任何线程上运行。

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

Multicore Considerations

It is safe to use a single NSOperationQueue object from multiple threads without creating additional locks to synchronize access to that object.

关于objective-c - NSOperationQueue 的线程是父线程还是新线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32703006/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com