NSOperationQueue:currentQueue / new之间的区别?

时间:2014-03-04 12:05:06

标签: ios objective-c multithreading nsoperationqueue

我正在试图找出这两者之间的区别。

这是否意味着currentQueue不能mainQueue或者这是一个错误的假设?

3 个答案:

答案 0 :(得分:2)

如果你在主线程中调用它,

currentQueue会返回mainQueuenew是具有新线程的新队列

答案 1 :(得分:2)

new是初始化方法,NSOperationQueue继承自NSObject

文档说:

  

此方法是allocinit的组合。与alloc类似,它初始化新对象的isa实例变量,因此它指向类数据结构。然后它调用init方法来完成初始化过程。

这意味着调用+new会创建NSOperationQueue

的新实例

currentQueue返回调用该方法的队列。

NSOperationQueue的{​​{1}}文档说:

  

启动操作的操作队列,如果无法确定队列,则为nil

即。如果调用currentQueue的方法为+currentQueue,则可以返回mainQueue

答案 2 :(得分:1)

@ Cy-4AH写的概念证明。跳这可以澄清一点。

-(void) viewDidLoad {
    NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^(void){
        //this block will executed in a separate thread (not the main thread)
        if ([NSOperationQueue currentQueue] == [NSOperationQueue mainQueue]) {
            NSLog(@"= in block");
        } else {
            NSLog(@"not = in block"); //This will be log
        }
    }];



    NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
    [operationQueue addOperation:blockOperation];

    //this block will executed in the main thread
    if ([NSOperationQueue currentQueue] == [NSOperationQueue mainQueue]) {
        NSLog(@"= outside of block"); //This will be log
    } else {
        NSLog(@"not = outside of block");
    }

}