Я пытаюсь лучше понять циклы запуска, поскольку они применяются к приложениям Mac (NSRunLoop), но это также может быть более общим вопросом. Документация NSRunLoop говорит:Почему основной цикл запуска и обработка входных данных не требуют процессорного времени?
... ваш код обеспечивает
while
илиfor
цикл, который приводит в движение цикл выполнения. В вашем цикле используется объект цикла выполнения для «запуска» коды события обработки, который принимает события и вызовов установленных обработчиков
Документов есть пример кода, как это:.
BOOL shouldKeepRunning = YES;
NSRunLoop *theRL = [NSRunLoop currentRunLoop];
while (shouldKeepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
Таким образом, код продолжает вызывать цикл цикла до тех пор, пока не будет принято решение о его прекращении. Метод -runMode:beforeDate:
«Запускает цикл один раз, блокируя ввод в указанном режиме до определенной даты». Также существует метод -run
, который « приемник в постоянный контур, в течение которого он обрабатывает данные из всех подключенных источников входного сигнала ».
Как можно повторять вызов цикла цикла (или вызов -run
, который, по-видимому, делает это сам), не потребляет процессор? Приложение Cocoa может сидеть сложа руки в фоновом режиме, пока выполняется его основной цикл запуска, и он будет потреблять нулевое (или почти нулевое) время CPU.
И в пределах -runMode:beforeDate:
, как может быть запущен цикл цикла до тех пор, пока вход не будет принят или таймеры не будут гореть без опроса и потребления процессора?