Поскольку при вызове контроллера представления вызывается метод -dealloc
этого контроллера, возможно, вы освобождаете свою очередь слишком рано, и какая-то другая часть вашего приложения пытается получить доступ к очереди или операции внутри нее, которой больше нет.
Я рекомендую поместить ваш экземпляр NSOperationQueue *myQueue
в ваш делегат приложения.
Используйте методы -applicationDidFinishLaunching:
и -dealloc
делегата приложения для инициализации и освобождения очереди и ее содержимого.
Отделив вашу очередь от контроллера представления, ваша очередь не освободится, когда вы отключите контроллер представления от стека навигации. Он и все остальные операции должны быть доступны для остальной части приложения.
Чтобы упростить доступ к вашей очереди, настройте следующее определение макроса:
#define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)
Затем вы можете использовать макрос для доступа к своей очереди следующим образом, например ::
NSLog(@"%@", [[UIAppDelegate myQueue] operations]);
Или, например:
[[UIAppDelegate myQueue] addOperation:myOperation];