1

我有一个使用 NSURLSession 从 url 下载视频的程序,但我无法同时进行多个下载。我该怎么做?如何管理多个同时下载?

    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];
4

1 回答 1

0

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

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

qualityOfService
maxConcurrentOperationCount

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

HTTPMaximumConnectionsPerHost
HTTPShouldUsePipelining

最后,您应该查看“具有自定义委托的 URL 会话的生命周期”部分。您应该确认您是否使用NSURLSessionTaskDelegateNSURLSessionDownloadTaskDelegate或仅使用完成处理程序的委托方法。

你需要花更多的时间来配置 NSURLSession 来支持你想做的工作。

于 2016-05-15T23:18:56.657 回答