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

时间:2011-10-17 21:14:47

标签: iphone objective-c ios nsthread

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

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

而不是

[NSThread sleepForTimeInterval:1];

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

1 个答案:

答案 0 :(得分:9)

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

我通常有这种结构:

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

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