Положите NSThread на основе цикла выполнения на неопределенное время - PullRequest
4 голосов
/ 18 марта 2011

У меня есть специальная сетевая тема в моем приложении для iOS. Метод -main потока выглядит следующим образом:

- (void)main
{   
    @try 
    {       
        while (!self.isCancelled) 
        {
            NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

            [[NSRunLoop currentRunLoop] run];

            [pool drain];
        }
    }
    @catch (NSException * e) 
    {
        NSLog(@"%@", e);
    }
}

У меня есть NSOperationQueue, заполненный http-операциями (параллельный подкласс NSOperation на основе цикла выполнения). Теперь, когда я знаю, что для потока runloop требуются http-операции, я хотел бы иметь возможность запретить выполнение потока runloop, когда нет работы. Я где-то читал (полезно, я знаю), что NSRunLoop автоматически спит, когда у него нет работы. Однако я использовал профилировщик времени Instruments и увидел, что поток runloop всегда был активным.

Как я могу организовать использование NSRunLoop и NSThread для предотвращения этой растраты ресурсов?

...