Как сделать NSOperation совместимым без добавления в NSOperationQueue в iPhone - PullRequest
0 голосов
/ 22 августа 2011

Я пытаюсь создать NSOperation путем создания подклассов из NSOperation.Я хочу, чтобы моя операция выполнялась в отдельном потоке, а также она должна поддерживать опцию отмены, т.е. я должен иметь возможность остановить поток (или операцию) в любой момент времени. Я попытался добавить свой экземпляр операции в NSOperationQueue, все работает нормально, но через некоторое время «операция» выполняется, что замедляет мое приложение. Поэтому я попытался запустить свою операцию самостоятельно, вызвав [theOperation start];, это довольно быстро, но Выполнение в главном потоке. Как заставить NSOperation работать в отдельном потоке с опцией отмены, пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 22 августа 2011

либо:

1) не делайте это NSOperation и явно создайте поток.

2) используйте вторую очередь операций и / или увеличьте приоритет.

3) используйте тип контейнера для результата.когда вам это нужно немедленно, отмените операцию фоновой загрузки и загрузите вручную.

0 голосов
/ 22 августа 2011

Я считаю, что вам нужно реализовать - (BOOL)isConcurrent:

- (BOOL)isConcurrent
{
    return YES;
}

Но есть последствия. Прочитайте справочные документы Apple по по NSOperation , в частности, раздел Примечания по подклассам . Также обратите внимание, что если вы хотите, чтобы операция была отменяемой, вам нужно самостоятельно реализовать поведение отмены: например, в селекторе main вам необходимо проверить, была ли операция отменена, и немедленно вернуться, если она была.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...