NSURLConnection没有清理线程?

时间:2012-04-16 05:37:45

标签: objective-c nsurlconnection

我在NSNetServiceBrowser周围写了一个包装器,我看到了一些奇怪的线程行为。在以各种不同的方式探究发生了什么后,我想出了以下完全不相关的代码片段,这些代码片段表现出我不理解的行为。

打开Xcode并制作命令行工具并将以下代码段粘贴到main.m文件中。观察活动监视器中的线程计数。在我的机器上NSURLConnection完成后,它似乎在4-7个线程中运行。我希望在NSURLConnection完成之后程序将只运行1个线程。如果你注释掉URL加载,只留下自动释放池和[runLoop run]调用,那么应用程序只使用一个线程。

这里发生了什么?

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSData *data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]] returningResponse:nil error:nil];

    NSLog(@"data %@", data);

    [[NSRunLoop currentRunLoop] run];

    [pool release];

    return 0;
}

从我从文档中收集到的内容以及通过查看cocotron源代码,NSURLConnection sendSyncrhonous生成一个新线程来加载URL并阻止调用线程直到完成。从这看起来应用程序应该使用最多2个线程,并且只在URL加载时。一旦完成,它应该回到1.

0 个答案:

没有答案