运行具有不同日期的NSRunLoop会更改观察到的线程数

时间:2012-05-09 22:22:41

标签: objective-c nsdate nsthread nsrunloop

在编写应用程序时,我遇到了一些我没想到的奇怪行为,并将其提炼为以下内容:

我做了一个应用程序,其主要功能如下。在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

1 个答案:

答案 0 :(得分:2)

最有可能的是,一个实现细节,无需担心......

distantFuture的一个可能实现是“永远执行”,因此,不需要像具有特定日期的计时器那样的计时器。鉴于“计时器”实际上可能是dispatch_after(),这可能解释了队列。

或不。有趣的问题,但可能与您的应用完全无关。