【发布时间】:2014-03-07 20:21:21
【问题描述】:
我正在尝试使用 NSOperation 和 NSOperationQueue 从某个服务器下载多个图像。我的主要问题是下面的代码 sn-p 和这个链接http://www.dribin.org/dave/blog/archives/2009/05/05/concurrent_operations/ 之间有什么区别,性能方面?我更喜欢第二种方案,因为我们对操作有更多的控制权,它更干净,如果连接失败你可以妥善处理。
如果我尝试使用以下代码从服务器下载大约 300 张图像,我的应用程序将有相当大的延迟,如果我启动应用程序,然后立即进入主屏幕,然后返回应用程序,我会崩溃,因为没有足够的时间让应用程序再次激活。如果我取消注释[queue setMaxConcurrentOperationCount:1],用户界面是响应式的,进入后台并返回前台不会崩溃。
但是如果我实现类似于上面链接的东西,我不需要担心设置maxConcurrentOperationCount,默认值就可以了。一切都是响应式的,没有崩溃,而且似乎所有队列都完成得更快。
所以这就引出了我的第二个问题,为什么 [queue setMaxConcurrentOperationCount:1] 在我下面的代码中有这么大的影响?从文档中,我认为将 maxConcurrentOperationCount 保留为默认值很好,这只是告诉队列根据某些因素决定最佳值。
这是我在 Stack Overflow 上的第一篇文章,所以希望这是有道理的,感谢您的帮助!
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//[queue setMaxConcurrentOperationCount:1];
for(NSURL *URL in URLArray) {
[queue addOperationWithBlock:^{
NSHTTPURLResponse *response = nil;
NSError *error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:URL] returningResponse:&response error:&error];
if(!error && data) {
[data writeToFile:path atomically:YES];
}
}];
}
【问题讨论】:
标签: ios iphone nsurlconnection nsoperation nsoperationqueue