我的應用程序需要下載許多文件,我使用for循環來創建下載任務。以下方法是AFNetworking提供的方法。AFNetworking/NSURLSession需要很長時間來創建超過100個任務來下載文件
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request
progress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlock
destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination
completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler{
__block NSURLSessionDownloadTask *downloadTask = nil;
url_session_manager_create_task_safely(^{
downloadTask = [self.session downloadTaskWithRequest:request];
});
[self addDelegateForDownloadTask:downloadTask progress:downloadProgressBlock destination:destination completionHandler:completionHandler];
return downloadTask;
}
我的代碼是這樣的:
for (NSInteger i = 0; i<= 500; i++) {
NSMutableURLRequest *request = array[i];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:downloadProgress destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
return destinationPath;
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
completionBlock(filePath,error);
}];
[downloadTask resume];
}
問題是
downloadTask = [self.session downloadTaskWithRequest:request];
此行花費比較長的時間完成,這意味着如果EXCUTE它500次,需要5〜6秒。
我的應用程序彈出一個alertView來詢問用戶是否下載,如果他們點擊Yes,它會執行類似for循環的操作,結果UI將卡住5到6秒直到所有任務都完成創建。
我不確定我是否正確或是否有其他方法可以批量下載。 任何人都可以幫助我嗎?謝謝。
我可以使用GCD做這件事? – user2053760
cgd是什麼意思? –