1

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

我做了一个应用程序,其主要功能如下。在活动监视器中观察它时,它使用一个线程。

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 个线程。在检查了一下之后,似乎 adispatch_queue已代表我隐式创建,这反过来又创建了一个线程池。

只是好奇:为什么会发生这种情况?怎么样[NSDate dateWithTimeIntervalSinceNow:1.0]导致运行循环创建一个dispatch_queue

4

1 回答 1

2

最有可能的是一个实现细节,没有什么可担心的......

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

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

于 2012-05-09T22:31:43.320 回答