2013-11-01 114 views
-1

我可能會誤解函數runMode:beforeDate:的功能,但爲什麼這似乎永遠運行(至少超過10秒設置)。runMode:beforeDate:永遠運行

NSRunLoop *theRL = [NSRunLoop currentRunLoop]; 
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10]; 
while ([theRL runMode:NSDefaultRunLoopMode beforeDate:date]) { 
    NSLog(@"in loop %d %@ %@", [theRL runMode:NSDefaultRunLoopMode beforeDate:date], date, [NSDate date]); 
} 

回答

1

因爲你放了一個循環。 (實際上,你把它叫做兩次每個環路,因爲您在NSLog()電話再次調用它。)

-runMode:beforeDate:返回YES如果運行循環有任何來源或計時器。運行一個運行循環爲這些源和定時器提供服務,但不會刪除或「消耗」它們。所以,如果你循環一次,你很可能永遠循環。 (如果所有輸入源和定時器都從運行循環中刪除,那麼您的循環將退出,但您不能依賴該循環。框架可能會將您不控制的源或定時器添加到運行循環中。)

你想做什麼?爲什麼你仍然在運行循環?

+0

是的,我誤解了它的意思。我已經通過檢查日期以及是否在跳出循環之後修復了它。這是一個網絡資源單元測試,其他代碼與它,但這一部分讓我困惑。 – Rudiger