iOS开发关于NSOperationQueue

时间:2011-10-12 07:08:40

标签: ios cocoa nsoperation nsoperationqueue

我知道获取操作队列的两种方法如下:

queue1 = [[NSOperationQueue alloc] init];
queue2 = [[NSOperationQueue mainQueue] retain];

但我不知道它们之间有什么区别。

[queue1 addOperation:operation1]; 
[queue2 addOperation:operation2]; 

哪个线程在operation1上运行?主线程?还是不确定?

我测试了。

operation1 --> sometimes mainthread sometimes not. 
operation2 --> always mainthread. 

2 个答案:

答案 0 :(得分:1)

According to the documentation NSOperationQueue:

  

为非并发操作和启动创建单独的线程   来自当前线程的并发操作。

这解释了为什么你的一些任务在主线程上运行而其他任务没有。

mainQueue绑定到主线程,因此操作总是在主线程上执行。

答案 1 :(得分:1)

是的,斯蒂芬是对的。

主要目的是为非并发操作创建单独的线程,并从当前线程启动并发操作。

在这种情况下

queue1 = [[NSOperationQueue alloc] init];

queue1是属于您调用的线程的队列,即,如果从分离的线程调用上面的行,则它不属于主线程。

但是

queue2 = [[NSOperationQueue mainQueue] retain];

你在外部从ios获取队列,换句话说,第一个是VC / Class本地调用,第二个是全局的(ios 4中一个应用程序)