Использование NSThread sleep в NSOperation

Работая с некоторым кодом, я столкнулся с циклами выполнения, в которых я новичок, внутри NSOperationов.

Циклы NSOperationзаняты загрузкой данных - и пока они заняты, есть код для ожидания завершения загрузки, в виде NSRunLoopов и спящих потоков.

Этот код, в частности, представляет для меня интерес:

while (aCertainConditionIsTrue && [self isCancelled]==NO) {
     if(![[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]){
        [NSThread sleepForTimeInterval:1.0];
     }
}

Я читал о циклах выполнения, и runMode:beforeDate: будет ждать источника ввода или таймаута. Хотя я не уверен на 100%, что считать источником входных данных.

При первом выполнении всегда возвращается NO и срабатывает sleepForTimeInterval:. Это плохо?

В конкретном классе утилиты он часто бьет sleepForTimeInterval: - по одному разу для каждого потока - что значительно снижает производительность.

Есть лучшие решения для этого, или советы?

6
задан Costique 19 January 2012 в 16:36
поделиться