NSTask 源码中有趣的地方
Posted
技术标签:
【中文标题】NSTask 源码中有趣的地方【英文标题】:Interesting place in NSTask's source code 【发布时间】:2015-09-03 07:48:57 【问题描述】:在 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 的用途。又会调用谁的方法类?
【问题讨论】:
您在哪里找到该代码?你能提供参考/链接吗? github.com/timburks/gnustep-base/blob/master/Source/NSTask.m 【参考方案1】:计时器目标是nil
,因此选择器实际上是无关紧要的:您可以向nil
发送任何消息,然后将其简单地丢弃。
编译器仅验证选择器是否引用了某个已知方法,在本例中为NSObject
协议的class
方法。
下面的runMode
语句需要这个虚拟计时器
否则可能会立即终止,正如NSRunLoop
documentation 所述:
如果没有输入源或计时器附加到运行循环,则此方法立即退出并返回 NO;除此以外。
【讨论】:
以上是关于NSTask 源码中有趣的地方的主要内容,如果未能解决你的问题,请参考以下文章