Разница между Sleep и NSRunLoop runMode: beforeDate: - PullRequest
4 голосов
/ 18 октября 2011

Недавно я обнаружил, что при ожидании подключения NSURLConnections он работает намного лучше, если я скажу ожидающему потоку выполнить:

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

вместо

[NSThread sleepForTimeInterval: 1];

После прочтения немного о NSRunLoop runMode: beforeDate: похоже, что это предпочтительнее сна почти всегда. Люди нашли, что это правда?

1 Ответ

9 голосов
/ 18 октября 2011

Да, NSRunLoop лучше, потому что позволяет runloop отвечать на события, пока вы ждете.Если вы просто засыпаете свою ветку, ваше приложение будет блокироваться, даже если поступят события (например, сетевые ответы, которые вы ждете).

У меня обычно такая конструкция:

while ([self isFinished] == NO) {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

И затем isFinishedверните true, если вы хотите прекратить блокировку.Eith

...