我知道获取操作队列的两种方法如下:
queue1 = [[NSOperationQueue alloc] init];
queue2 = [[NSOperationQueue mainQueue] retain];
但我不知道它们之间有什么区别。
[queue1 addOperation:operation1];
[queue2 addOperation:operation2];
哪个线程在operation1上运行?主线程?还是不确定?
我测试了。
operation1 --> sometimes mainthread sometimes not.
operation2 --> always mainthread.
答案 0 :(得分:1)
According to the documentation NSOperationQueue:
为非并发操作和启动创建单独的线程 来自当前线程的并发操作。
这解释了为什么你的一些任务在主线程上运行而其他任务没有。
mainQueue
绑定到主线程,因此操作总是在主线程上执行。
答案 1 :(得分:1)
主要目的是为非并发操作创建单独的线程,并从当前线程启动并发操作。
在这种情况下
queue1 = [[NSOperationQueue alloc] init];
queue1是属于您调用的线程的队列,即,如果从分离的线程调用上面的行,则它不属于主线程。
但是
queue2 = [[NSOperationQueue mainQueue] retain];
你在外部从ios获取队列,换句话说,第一个是VC / Class本地调用,第二个是全局的(ios 4中一个应用程序)