Работая с некоторым кодом, я столкнулся с циклами выполнения, в которых я новичок, внутри 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:
- по одному разу для каждого потока - что значительно снижает производительность.
Есть лучшие решения для этого, или советы?