Да, Стивен прав.
Основная цель - создать отдельные потоки для не параллельных операций и запустить параллельные операции из текущего потока.
В этом случае
queue1 = [[NSOperationQueue alloc] init];
queue1 - это очередь, принадлежащая потоку, из которого вы вызвали, т.е. если вышеуказанная строка вызывается из отдельного потока, то она не будет принадлежать основному потоку.
но с
queue2 = [[NSOperationQueue mainQueue] retain];
Вы извлекаете очередь из ios извне, другими словами, 1-й - локально для вызываемого VC / Class, а второй - глобальный (один для одного приложения в ios-4)