在NSTask的源代码中,我在方法waitUntilExit中找到了有趣的地方:
- (void) waitUntilExit
{
NSTimer *timer = nil;
while ([self isRunning])
{
NSDate *limit = [[NSDate alloc] initWithTimeIntervalSinceNow: 0.1];
if (timer == nil)
{
timer = [NSTimer scheduledTimerWithTimeInterval: 0.1
target: nil
selector: @selector(class)
userInfo: nil
repeats: YES];
}
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode
beforeDate: limit];
RELEASE(limit);
}
[timer invalidate];
}
我无法理解NSTimer的目的。那个方法类会被调用吗?
答案 0 :(得分:1)
计时器目标是nil
,因此选择器实际上是不相关的:您可以向nil
发送任何消息,然后将其丢弃。
编译器仅验证选择器是否引用某种已知方法,在本例中为NSObject
协议的class
方法。
此虚拟计时器对于以下runMode
语句是必需的
否则可以立即终止,如NSRunLoop
documentation所述:
如果没有输入源或定时器附加到运行循环,则此方法立即退出并返回NO;除此以外。