區別

2011-10-17 54 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秒鐘。定時器會觸發,調用這樣做的方法,這會在定時器還在觸發時再次觸發定時器,現在您已經重新調用了定時器處理程序。 –