NSOperation 的执行线程取决于NSOperationQueue
您添加操作的位置。在您的代码中查看此语句 -
[[NSOperationQueue mainQueue] addOperation:yourOperation]; // or any other similar add method of NSOperationQueue class
所有这一切都假设您没有在方法中进行任何进一步的线程化,该main
方法NSOperation
是您(预期)编写的工作说明的实际怪物。
但是,在并发操作的情况下,情况就不同了。队列可以为每个并发操作生成一个线程。虽然它不是保证的,它取决于系统资源与系统中该点的操作资源需求。您可以通过它的属性来控制操作队列的并发maxConcurrentOperationCount
性。
编辑-
我发现您的问题很有趣,并自己做了一些分析/记录。我在这样的主线程上创建了 NSOperationQueue -
self.queueSendMessageOperation = [[[NSOperationQueue alloc] init] autorelease];
NSLog(@"Operation queue creation. current thread = %@ \n main thread = %@", [NSThread currentThread], [NSThread mainThread]);
self.queueSendMessageOperation.maxConcurrentOperationCount = 1; // restrict concurrency
然后,我继续创建一个 NSOperation 并使用 addOperation 添加它。当我检查当前线程时,在此操作的主要方法中,
NSLog(@"Operation obj = %@\n current thread = %@ \n main thread = %@", self, [NSThread currentThread], [NSThread mainThread]);
它不是主线程。并且,发现当前线程对象不是主线程对象。
因此,在主线程上自定义创建队列(其操作之间没有并发)并不一定意味着操作将在主线程本身上连续执行。