2013-11-25 3 views
0

Я знаю сейчас NSOperationQueue использует GCD. Я хочу подтвердить, является ли основная очередь операции и основная очередь отправки по существу такой же очередью, то есть ли порядок выполнения блока 1 перед блоком 2 гарантирован в коде ниже:Сериализация между NSOperationQueue и GCD

dispatch_async(background_queue, ^{ 
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
     // block 1 
    }];   

    dispatch_async(dispatch_get_main_queue(), ^{ 
     // block 2 
    }); 
}); 

ответ

2

Нет, нет что два блока будут выполнены в любом порядке. Возможно, они не могут. Для этого потребуется, чтобы NSOperationQueue немедленно переключил операцию в базовую очередь GCD. Это будет противоречить общим образцам класса.

Каждый раз, когда вам нужно выполнить две операции для сериализации по отношению друг к другу, вам необходимо явно управлять параллелизмом в вашем коде.

Смежные вопросы