runMode:beforeDate:永远运行

时间:2013-11-01 05:26:12

标签: objective-c nsdate nsrunloop

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

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 个答案:

答案 0 :(得分:1)

因为你绕了它。 (实际上,每次循环都会调用它两次,因为您在NSLog()调用中再次调用它。)

如果运行循环具有任何源或计时器,则

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

你想做什么?你为什么还要运行run loop?