Poc*_*chi 8 concurrency nsurlconnection grand-central-dispatch ios
我知道每个工作方式之间的区别,但我想从性能明智的角度来看(iphone中的资源).
假设我发送一个异步请求并等待代理被调用.这不会锁定我的执行线程.但是这样做与仅在另一个线程中使用GCD发送同步请求的区别是什么.
像这样:
dispatch_queue_t findPicsQueue;
findPicsQueue = dispatch_queue_create("FindPicsQueue", NULL);
dispatch_async(findPicsQueue, ^{
NSData *theResponse = [NSURLConnection sendSynchronousRequest:theRequest
returningResponse:&response
error:&error];
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
if (error) {
NSLog(@"Error: %@",error)
}
if (httpResponse.statusCode == 200)
{
[self parseXMLFile:theResponse]; // Parses Data and modifies picturesFound
for (PictureData *tmp in picturesFound) {
NSLog(@"%@",tmp);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它不会锁定我的界面,因为它没有在主线程中执行,但它会锁定这个特定的线程.而且我也认为GCD同时运行队列.
提前致谢.我真的想澄清这个问题.
如果使用NSURLConnection带sendAsynchronousRequest,那么几乎所有的处理都在主线程的地方,尤其是XML解析将对主线程上完成.但是,您的代码示例使用不同的线程进行处理.
如果您的iPhone或iPad处理器具有两个核心,则这种差异是相关的.然后,XML解析可以与主线程上的某些UI活动并行运行(在您的示例中).因此,与在主线程(sendAsynchronousRequest方法)上运行所有内容相比,它可以更早完成.
对于只有一个核心的旧设备,一次只能运行一个线程,这两种方法的行为几乎相同.