NSOperation - основной метод работает в основном потоке? - PullRequest
0 голосов
/ 22 ноября 2011

Почему мой подкласс NSOperation запускает метод main в главном потоке?Я хочу, чтобы он работал асинхронно.

@interface ServiceClient : NSOperation
@end

@implementation ServiceClient

- (void)main
{
   if ([[NSThread currentThread] isEqual:[NSThread mainThread]])
   {
      NSLog(@"Why does this get called on the main thread");
   }
}

@end

Запуск операции

ServiceClient *serviceClient = [[ServiceClient aloc] init];
[serviceClient start];

РЕДАКТИРОВАТЬ:

Документация предлагает переопределить isCuncurrent и вернуть да,но метод не вызывается.

- (BOOL)isConcurrent
{
   return YES;
}

1 Ответ

3 голосов
/ 22 ноября 2011

Вам нужно настроить собственную нить в методе start

Фрагмент, взятый из Руководство по программированию параллелизма

1010 * начать *
(Обязательно) Все параллельные операции должны переопределять этот метод и заменять поведение по умолчанию их собственной пользовательской реализацией. Чтобы выполнить операцию вручную, вы вызываете ее метод запуска. Следовательно, ваша реализация этого метода является отправной точкой для вашей операции и является местом, где вы настраиваете поток или другую среду выполнения, в которой будет выполняться ваша задача. Ваша реализация не должна вызывать super в любое время.

Если вы добавите NSOperation к NSOperationQueue, он позаботится об этом за вас.

...