我有一个使用NSURLSession从网址下载视频的程序,但我无法同时进行多次下载。 我该怎么做? 如何管理多个同时下载?
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
NSURLSessionDownloadTask *getVideo = [session downloadTaskWithURL:fileURL
completionHandler:^(NSURL *location,
NSURLResponse *response,
NSError *error) {
// 2
receivedData = [NSData dataWithContentsOfURL:location];
dispatch_async(dispatch_get_main_queue(), ^{
// do stuff with image
NSLog(@"%s receiveData:%d",__FUNCTION__,[receivedData length]);
});
}];
[getVideo resume];
答案 0 :(得分:0)
从上面提供的代码中,您没有使用NSURLSessionConfiguration类的任何属性来实现更好的下载性能。
首先,我建议使用您自己的委托队列。如果您没有提供队列,则会话为所有委托和完成处理程序调用创建一个串行操作队列,请参阅"创建会话" NSURLSession Class Reference document的部分以获取更多详细信息。您可以查看NSOperationQueue的以下属性以帮助提高性能;
qualityOfService
maxConcurrentOperationCount
接下来,我会看一下可能有帮助的NSURLSessionConfiguration属性。
HTTPMaximumConnectionsPerHost
HTTPShouldUsePipelining
最后,您应该查看“使用自定义代表和#34;进行URL会话的生命周期”部分。您应该确认是使用NSURLSessionTaskDelegate
和NSURLSessionDownloadTaskDelegate
的委托方法还是仅使用完成处理程序。
您需要花费更多时间来配置NSURLSession以支持您想要完成的工作。