Как удалить / отменить NSInvocationOperation из NSOperationQueue? - PullRequest
3 голосов
/ 26 июля 2011

Оба следующих вопроса задаются в контексте для поддержки NSOperationQueue и NSInvocationOperation.

Поскольку я использовал эту концепцию для загрузки нескольких видео, как мне удалить / выпустить добавленную NSInvocationOperation из NSOperationQueue после завершения загрузки видео?

А также, что мне делать, если я хочу прекратить загрузку определенного видео во время процесса загрузки?

Ответы [ 2 ]

5 голосов
/ 26 июля 2011

как удалить / освободить добавленную NSInvocationOperation из NSOperationQueue после завершения загрузки видео?

Операция автоматически удаляется из очереди после ее завершения, т.е. когда - isFinished возвращает true.

А также, что мне делать, если в случае, если я хочу прекратить загрузку определенного видео во время процесса загрузки?

Если вы хотите остановить операцию на полпути, вы должны отправить ей сообщение -cancel . Однако это волшебным образом не остановит выполнение операции.Ваша задача должна периодически проверять, отменена ли она, и завершать себя, если выясняется, что она была выполнена.Таким образом, вам нужно загружать ваше видео порциями и проверять отмененный статус операции после каждой порции.Следующий псевдокод может помочь:

 while (![myOperation isCancelled] && thereIsMoreData)
 {
     download a chunk of data and save it
 }

Это означает, например, что вы не можете использовать NSURLConnection '-sendSynchronousRequest:returningResponse:error: для получения данных, потому что он не сможет проверить отмененный статусоперации, пока все данные не будут загружены.

1 голос
/ 26 июля 2011

После того, как NSOperation выполнит эту задачу до ее завершения, она будет автоматически удалена из очереди. Ссылка ссылка .

Сделать подкласс NSOperation. Сохраняйте идентификатор для каждой операции. Сохраните все операции в массиве. Если вы не хотите, чтобы операция продолжалась, просто отправьте сообщение об отмене операции, т. Е. [_operation cancel];

...