У меня в главном потоке NSOperationQueue выполняется набор NSOperations (макс. Одновременный набор 1), которые я хочу иметь возможность отменить в любое время.Когда я нажимаю кнопку, я приказываю очереди отменить все операции и дождаться завершения.Это должно привести к зависанию основного потока до тех пор, пока очередь операций не опустеет, однако мой главный поток зависает бесконечно.
Вот код, который я использую для его остановки:
...
[myQueue cancelAllOperations];
[myQueue waitUntilAllOperationsAreFinished];
return YES; // This line never gets called
Примечание: Мне нужно использовать waitUntilAllOperationsAreFinished
, поскольку дальнейшие процессы требуют, чтобы очередь была пустой.
Странно то, что это происходит только на устройстве.При работе в симуляторе он работает как положено.
Я наблюдал за точками останова и могу следить за текущей выполняемой операцией до ее завершения.Он обнаруживает [self isCancelled], останавливает свою работу и проникает в конец метода main
.Я вижу, что ничто в операции не приводит к зависанию, и после отмены всех операций ни одна из других операций не должна начинаться, и очередь должна заканчиваться.Я проверил, добавив точки останова, и ни одна из других операций не началась.
Почему это происходит?