区别

2011-10-17 26 views
4

我最近发现,在等待的时候我NSURLConnections来通过它的效果要好得多,如果我告诉等待的线程做:区别

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

而不是

[NSThread sleepForTimeInterval:1];

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

+0

你的意思是“工作好得多”? –

回答

9

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

我通常有这样的结构:

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

而当你想要再有isFinished返回TRUE以停止阻止。 Eith

+1

以公共模式重新运行runloop往往会导致意想不到的后果。例如,计划一个重复计时器1秒钟。定时器会触发,调用这样做的方法,这会在定时器还在触发时再次触发定时器,现在您已经重新调用了定时器处理程序。 –