Sleep和NSRunLoop之间的区别runMode:beforeDate:

Tur*_*age 4 iphone objective-c nsthread ios

我最近发现,当等待我的NSURLConnections通过它时,如果我告诉等待线程做的话,效果会好得多:

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

代替

[NSThread sleepForTimeInterval:1];

在阅读了一些关于NSRunLoop runMode:beforeDate之后:听起来它总是优于睡眠.有人发现这是真的吗?

小智 9

是的,NSRunLoop更好,因为它允许runloop在您等待时响应事件.如果你只是睡觉你的线程你的应用程序将阻止即使事件到达(如你正在等待的网络响应).

我通常有这种结构:

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

然后当你想要阻止阻止时,将isFinished返回true.Eith