2012-05-09 27 views
1

虽然写一个应用程序,我遇到了我没想到一些奇怪的行为和蒸馏水它归结为以下几点:运行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

回答

2

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

一个可能实现的distantFuture是“做永远的”,因此,没有必要像一个定时器W/A特定日期。鉴于“计时器”实际上可能是dispatch_after(),这可能会解释队列。或者不可以。

否。有趣的问题,但可能完全无关你的应用程序。

+3

我同意比尔,这是一个实施细节,沿着“有多少保留在我的对象上”这一线应该被认为是最不相关的好奇心。也就是说,我认为遥远的未来可能意味着“直到输入源被触发为止一直运行”,同时给它一个特定的时间需要它在某个层次上创建一个定时器源来驱动运行循环的自动中断。 – danielpunkass

+1

我曾假设没有什么可担心的,但我仍然非常好奇。我总是喜欢更多地了解这样的东西。感谢你们俩! – user988375