我在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.