Подтвердить что ты не робот

Как приостановить NSOperation в NSOperationQueue?

Мне нужно приостановить запуск NSOperation, который был вставлен в NSOperationQueue. В настоящее время я отменяю все операции и перезапускаю их. Но это приведет к некоторому дублированию с точки зрения процесса. Я попытался использовать флаг setSuspended NSOperationQueue. Но это не приостанавливает операцию. Есть ли выход?

4b9b3361

Ответ 1

см. это: Ссылка

И здесь из apple docs:

Приостановка и возобновление очередей Если вы хотите временно приостановить выполнение операций, вы можете приостановить соответствующую очередь операций с помощью метода setSuspended:.

Приостановка очереди не приводит к тому, что уже выполняются операции для приостановки в середине их задач. Это просто предотвращает запуск новых операций для выполнения. Вы можете приостановить очередь в ответ на запрос пользователя, чтобы приостановить любую текущую работу, потому что ожидание состоит в том, что пользователь может в конечном итоге захочет возобновить эту работу.

Ответ 2

Я не пробовал это, но я бы, наверное, начал здесь:

  • добавьте флаг isPaused в подкласс NSOperation
  • реализовать метод копирования/перемещения для данных операции
  • если приостановлено, setCancelled: (следите за этим изменением в -main)
  • создать новую операцию перемещения состояния от приостановленной операции до новой операции
  • настроить приоритет для порядка порядка порядка в очереди, если вам нравится
  • добавить клон в очередь
  • return from -main, если в -main

Обратите внимание, что это просто приостановит его. если вы действительно хотите приостановить и явно возобновить, вы будете вручную "новую операцию", когда хотите возобновить.

теперь, если вы наблюдаете или имеете специальные дополнения, тогда у вас будет еще несколько проблем. для простых случаев кажется, что этот подход работает нормально.