Objective c 运行模式:beforeDate:永远运行

Objective c 运行模式:beforeDate:永远运行,objective-c,nsdate,nsrunloop,Objective C,Nsdate,Nsrunloop,我可能误解了函数runMode:beforeDate:的作用,但为什么它似乎永远运行(至少超过10秒设置) 因为你在它周围打了个圈。(实际上每个循环调用它两次,因为在NSLog()调用中再次调用它。) -runMode:beforeDate:如果运行循环有任何源或计时器,则返回YES。运行运行循环服务于这些源和计时器,但不会删除或“使用”它们。所以,如果你循环一次,你很可能会永远循环。(如果从运行循环中删除了所有输入源和计时器,您的while循环将退出,但您不能依赖于此。框架可能会将您无法控制的

我可能误解了函数
runMode:beforeDate:
的作用,但为什么它似乎永远运行(至少超过10秒设置)


因为你在它周围打了个圈。(实际上每个循环调用它两次,因为在
NSLog()调用中再次调用它。)

-runMode:beforeDate:
如果运行循环有任何源或计时器,则返回
YES
。运行运行循环服务于这些源和计时器,但不会删除或“使用”它们。所以,如果你循环一次,你很可能会永远循环。(如果从运行循环中删除了所有输入源和计时器,您的
while
循环将退出,但您不能依赖于此。框架可能会将您无法控制的源或计时器添加到运行循环中。)


你想干什么?你为什么要运行跑步循环?

是的,我误解了它的作用。我已经通过检查日期和是否在跳出循环后进行了修复。这是针对网络资源的单元测试,还有其他代码,但这一部分让我感到困惑。
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]);
}