2015-07-03 2 views
1

У меня есть проблема с NSRunLoop. При запуске кода, как показано ниже, основной поток, кажется, останавливается, и он не будет запускать код после цикла while. Я хочу знать, когда [[NSRunLoop currentRunLoop] RunMode: NSDefaultRunLoopMode beforeDate: [NSDate distantFuture]] выполняется, то, что происходит в runloop mainthread в? Поскольку мы знаем, что UI mainthread'runloop запускается автоматически при запуске приложения, отключается ли основной поток или он находится в мертвой зоне?Что делает «[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate: [NSDate farFuture]]« делать?

while (!self.runLoopThreadDidFinishFlag) { 
    NSLog(@"Begin RunLoop"); 

    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; 

    NSLog(@"End RunLoop"); 
} 

ответ

2
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]] 

Эта линия кодов просто дайте нить выполнить источники Петля однажды, если нет задачи, то вернуть immediately.So эти коды не блокируют ваши основные thread.Mainthread годов runloop run automaticly означает, что основной поток удерживает круг while, чтобы выполнить [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]] снова и снова. Когда он запускается до вашего собственного, а круг while (!self.runLoopThreadDidFinishFlag), статус всегда может быть правдой, которая может блокировать поток. ваш собственный код [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]] здесь означает выполнение источников цикла один раз или очистка задач в источниках runloop, если есть одно изменение задачи self.runLoopThreadDidFinishFlag, тогда ваш код будет двигаться дальше.

Так [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]] в вашем while круге сделать mainthread есть шанс goto выполнить другой код, который может изменить runLoopThreadDidFinishFlag.

PS. [NSRunLoop run] очень отличается с runMode:beforeDate: вы можете смутить. NSRunLoop apple document

Смежные вопросы