多次下载NSURLSession

时间:2013-12-09 21:46:54

标签: ios nsurlsession

我有一个使用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];

1 个答案:

答案 0 :(得分:0)

从上面提供的代码中,您没有使用NSURLSessionConfiguration类的任何属性来实现更好的下载性能。

首先,我建议使用您自己的委托队列。如果您没有提供队列,则会话为所有委托和完成处理程序调用创建一个串行操作队列,请参阅"创建会话" NSURLSession Class Reference document的部分以获取更多详细信息。您可以查看NSOperationQueue的以下属性以帮助提高性能;

qualityOfService
maxConcurrentOperationCount

接下来,我会看一下可能有帮助的NSURLSessionConfiguration属性。

HTTPMaximumConnectionsPerHost
HTTPShouldUsePipelining

最后,您应该查看“使用自定义代表和#34;进行URL会话的生命周期”部分。您应该确认是使用NSURLSessionTaskDelegateNSURLSessionDownloadTaskDelegate的委托方法还是仅使用完成处理程序。

您需要花费更多时间来配置NSURLSession以支持您想要完成的工作。