Objective c 使用不同的日期运行nsrunlop会更改观察到的线程数
在编写应用程序时,我遇到了一些意想不到的奇怪行为,并将其归结为以下几点: 我做了一个应用程序,它的主要功能如下。在活动监视器中观察时,它使用一个线程Objective c 使用不同的日期运行nsrunlop会更改观察到的线程数,objective-c,nsdate,nsthread,nsrunloop,Objective C,Nsdate,Nsthread,Nsrunloop,在编写应用程序时,我遇到了一些意想不到的奇怪行为,并将其归结为以下几点: 我做了一个应用程序,它的主要功能如下。在活动监视器中观察时,它使用一个线程 int main(int argc, const char * argv[]) { @autoreleasepool { while (YES) { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
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个线程。在检查这一点之后,似乎已经代表我隐式创建了一个调度队列
,这又形成了一个线程池
只是好奇:为什么会这样?
[NSDate DATE WITH TIMEINTERVALICENCENOW:1.0]
会导致运行循环创建一个调度队列吗?很可能是一个实现细节,无需担心
distantFuture
的一个可能实现是“永远这样做”,因此,不需要像特定日期那样的计时器。假设“timer”实际上可能是dispatch\u after()
,这可能解释了队列
或者不是。有趣的问题,但可能与您的应用程序完全无关。我同意比尔的观点,这是一个实现细节,大意是“我的对象上有多少保留”,应该被视为一个最不相关的好奇心。也就是说,我确实认为distantFuture很可能意味着“永远运行,直到输入源触发”,而给它一个特定的时间要求它创建一个计时器源,在某种程度上,来驱动运行循环的自动中断。我原以为这没什么好担心的,但我还是很好奇。我总是想知道更多像这样的事情。谢谢你们两个!