在编写应用程序时,我遇到了一些我没想到的奇怪行为,并将其提炼为以下内容:
我做了一个应用程序,其主要功能如下。在Activity Monitor中观察它时,它使用一个线程。
int main(int argc, const char * argv[])
{
@autoreleasepool
{
while (YES)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate distantFuture]];
}
}
return 0;
}
如果我将[NSDate distantFuture]
更改为[NSDate dateWithTimeIntervalSinceNow:1.0]
,该应用使用~3个主题。稍微检查一下后,似乎代表我隐式创建了dispatch_queue
,而这又创建了一个线程池。
只是好奇:为什么会这样?那么[NSDate dateWithTimeIntervalSinceNow:1.0]
会导致运行循环创建dispatch_queue
?
答案 0 :(得分:2)
最有可能的是,一个实现细节,无需担心......
distantFuture
的一个可能实现是“永远执行”,因此,不需要像具有特定日期的计时器那样的计时器。鉴于“计时器”实际上可能是dispatch_after()
,这可能解释了队列。
或不。有趣的问题,但可能与您的应用完全无关。