2013-11-01 109 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