ios - NSURLSession - 执行两个请求并解析两个响应,但仍然阻塞主线程

标签 ios objective-c nsurlconnection nsurlsession

我想对我的远程服务器执行两个请求并异步获取和解析两个响应,但仍然阻塞主线程直到两个进程都完成。

这是我在 AppDelegate.m 的 application: didFinishLaunchingWithOptions: 中的代码方法:


    NSURL *url1 = [NSURL URLWithString: @"url1"];
    NSURL *url2 = [NSURL URLWithString:@"url2"];
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task1 = [session dataTaskWithURL:url1 completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//process1
    }];
    [task1 resume];

    NSURLSessionDataTask *task2 = [session dataTaskWithURL:url2 completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        //process2
    }];
    [task2 resume];

在这段代码中,我想从 url1 获取数据并解析 process1 中的响应,也想对 url2 做同样的事情和 process2 .

然而,虽然我想异步执行上面的这两个过程,但我也想等待两者完成每项工作后再结束 AppDelegate.mapplication: didLaunchingWithOptions:方法,因为如果在上述两个执行完成之前初始化它,我的第一个 View Controller (在 AppDelegate.m 之后)会发生错误。

这在一些语言如Python或Go中很容易实现,我认为它也可以在NSURLConnection中实现。在 Objective-C 中(虽然我没有尝试,如果不是这样请原谅我)。但是,我想使用 NSURLSession在这种情况下,因为实际的 session 配置比上面的代码要复杂一些。

那么在NSURLSession中使用同步特性是否可行? ?

最佳答案

为什么要阻塞主线程?这对用户不利,对您也不利。

更改您的 View Controller 以显示进度指示而不是崩溃。这使应用程序保持事件状态,并让用户了解正在发生的事情。如果您愿意,您可以制作一个漂亮的动画供用户在等待时观看。

关于ios - NSURLSession - 执行两个请求并解析两个响应,但仍然阻塞主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21953275/

相关文章:

iphone - 为什么应该将常量实现文件添加到框架目标中?

ios - 为什么表格 View 的大小与 iPhone X~iPhone XS Max 不同?

iphone nsurlconnection 读取cookie

iphone - 如何在 NSMutableUrlRequest 中发布文本和图像数据?

objective-c - 从 TableView 中删除行

iOS SDK - 在蒙版图像上投下阴影

iphone - 将大量数据插入 Core Data 需要多少时间

ios - UIBarButtonItem 导致应用程序崩溃

ios - 在自定义 Swift 框架中的 Objective-C 文件上使用 Swift

iOS - 如何使用 SOAP 发送附件?