iOS разрабатывает о NSOperationQueue - PullRequest
0 голосов
/ 12 октября 2011

Я знаю два способа получить очередь операций следующим образом:

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

Но я не знаю, чем они отличаются.

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

в каком потоке операция1 выполняется в? Главном потоке? или неопределенность?

Я проверял.

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

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Да, Стивен прав.

Основная цель - создать отдельные потоки для не параллельных операций и запустить параллельные операции из текущего потока.

В этом случае

queue1 = [[NSOperationQueue alloc] init];

queue1 - это очередь, принадлежащая потоку, из которого вы вызвали, т.е. если вышеуказанная строка вызывается из отдельного потока, то она не будет принадлежать основному потоку.

но с

queue2 = [[NSOperationQueue mainQueue] retain];

Вы извлекаете очередь из ios извне, другими словами, 1-й - локально для вызываемого VC / Class, а второй - глобальный (один для одного приложения в ios-4)

1 голос
/ 12 октября 2011

Согласно документации NSOperationQueue's:

создание отдельных потоков для не параллельных операций и запуск параллельные операции из текущего потока.

Это объясняет, почему некоторые из ваших задач работают в основном потоке, а другие нет.

mainQueue связан с основным потоком, поэтому операции всегда выполняются с основным потоком.

...