Мне нужно приостановить запуск NSOperation, который был вставлен в NSOperationQueue. В настоящее время я отменяю все операции и перезапускаю их. Но это приведет к некоторому дублированию с точки зрения процесса. Я попытался использовать флаг setSuspended NSOperationQueue. Но это не приостанавливает операцию. Есть ли выход?
Как приостановить NSOperation в NSOperationQueue?
Ответ 1
см. это: Ссылка
И здесь из apple docs:
Приостановка и возобновление очередей Если вы хотите временно приостановить выполнение операций, вы можете приостановить соответствующую очередь операций с помощью метода setSuspended:.
Приостановка очереди не приводит к тому, что уже выполняются операции для приостановки в середине их задач. Это просто предотвращает запуск новых операций для выполнения. Вы можете приостановить очередь в ответ на запрос пользователя, чтобы приостановить любую текущую работу, потому что ожидание состоит в том, что пользователь может в конечном итоге захочет возобновить эту работу.
Ответ 2
Я не пробовал это, но я бы, наверное, начал здесь:
- добавьте флаг
isPaused
в подклассNSOperation
- реализовать метод копирования/перемещения для данных операции
- если приостановлено,
setCancelled:
(следите за этим изменением в-main
) - создать новую операцию перемещения состояния от приостановленной операции до новой операции
- настроить приоритет для порядка порядка порядка в очереди, если вам нравится
- добавить клон в очередь
- return from
-main
, если в-main
Обратите внимание, что это просто приостановит его. если вы действительно хотите приостановить и явно возобновить, вы будете вручную "новую операцию", когда хотите возобновить.
теперь, если вы наблюдаете или имеете специальные дополнения, тогда у вас будет еще несколько проблем. для простых случаев кажется, что этот подход работает нормально.