Если вам нужна последовательная очередь, вы правильно настроите maxConcurrentOperation на один. Вы также можете использовать [NSQperueQueue mainQueue] вместо создания новой очереди и, таким образом, операции очереди в основном потоке. Но это полезно только при добавлении очень коротких операций, поэтому пользовательский интерфейс не блокируется. И, с другой стороны, вам не нужно беспокоиться о n-канальной синхронизации.
Вы можете добавить операции в любую очередь с помощью addOperations: waitUntilFinished: YES или отправить сообщение waitUntilAllOperationsAreFinished каждый раз, когда вы добавляете операцию. Таким образом вы выполняете сериализацию операций вместо определения очереди как последовательной.