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很可能意味着“永远运行,直到输入源触发”,而给它一个特定的时间要求它创建一个计时器源,在某种程度上,来驱动运行循环的自动中断。我原以为这没什么好担心的,但我还是很好奇。我总是想知道更多像这样的事情。谢谢你们两个!