Anj*_*ali 4 objective-c grand-central-dispatch ios ios7 ios8
我想按顺序下载3个文件.其中两个是txt文件,一个是.gz文件.我正在使用NSURLConnection下载上述文件.
我是iOS编程的新手.我在SO和google的其他问题中看到我们可以使用串行调度队列来串行执行某些操作.
但我不知道如何用NSURLConnection做到这一点.我在下面尝试但没有奏效.
dispatch_queue_t serialQueue = dispatch_queue_create("com.clc.PropQueue", DISPATCH_QUEUE_SERIAL);
dispatch_async(serialQueue, ^{
[self downloadProp];
});
dispatch_async(serialQueue, ^{
[self downloadDatabase];
});
dispatch_async(serialQueue, ^{
[self downloadTxt];
});
Run Code Online (Sandbox Code Playgroud)
上面的代码没有执行NSURLCOnnection的connectionDidFinishLoading.任何人都有想法如何实现这一目标?
NSURLSession 提供一个队列,按照创建顺序下载每个任务.
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionTask *task1 = [session dataTaskWithURL:[NSURL URLWithString:@"http://yahoo.com"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"Complete 1");
}];
NSURLSessionTask *task2 = [session dataTaskWithURL:[NSURL URLWithString:@"http://msn.com"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"Complete 2");
}];
NSURLSessionTask *task3 = [session dataTaskWithURL:[NSURL URLWithString:@"http://google.com"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"Complete 3");
}];
// Regardless of which order the tasks are "resumed" (aka started) they will execute synchronously in the order added, above.
[task3 resume];
[task1 resume];
[task2 resume];
Run Code Online (Sandbox Code Playgroud)
根据评论和聊天更新:
对任务的排序和执行更具决定性......
NSURLSession *session = [NSURLSession sharedSession];
__block NSURLSessionTask *task1 = nil;
__block NSURLSessionTask *task2 = nil;
__block NSURLSessionTask *task3 = nil;
task1 = [session dataTaskWithURL:urlToFirstFile completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// CHECK ERROR
NSLog(@"First file completed downloading");
[task2 resume];
}];
task2 = [session dataTaskWithURL:urlToSecondFile completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// CHECK ERROR
NSLog(@"Second file completed downloading");
[task3 resume];
}];
task3 = [session dataTaskWithURL:[NSURL URLWithString:@"http://google.com"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// CHECK ERROR
NSLog(@"Third file completed downloading");
}];
[task1 resume];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3546 次 |
| 最近记录: |