NSURLConnection sendAsynchronousRequest:queue:completionHandler:连续发出多个请求?

2024-01-16

我一直在使用NSURLConnection's sendAsynchronousRequest:queue:completionHandler:方法很棒。但是,我现在需要连续发出多个请求。

我怎样才能在仍然使用这个伟大的异步方法的同时做到这一点?


根据您想要的行为,您可以通过多种方法来执行此操作。

您可以一次发送一堆异步请求,跟踪已完成的请求数量,并在全部完成后执行某些操作:

NSInteger outstandingRequests = [requestsArray count];
for (NSURLRequest *request in requestsArray) {
    [NSURLConnection sendAsynchronousRequest:request 
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
        [self doSomethingWithData:data];
        outstandingRequests--;
        if (outstandingRequests == 0) {
            [self doSomethingElse];
        }
    }];
}

你可以将这些块链接在一起:

NSMutableArray *dataArray = [NSMutableArray array];    
__block (^handler)(NSURLResponse *response, NSData *data, NSError *error);

NSInteger currentRequestIndex = 0;
handler = ^{
    [dataArray addObject:data];
    currentRequestIndex++;
    if (currentRequestIndex < [requestsArray count]) {
        [NSURLConnection sendAsynchronousRequest:[requestsArray objectAtIndex:currentRequestIndex] 
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:handler];
    } else {
        [self doSomethingElse];
    }
};
[NSURLConnection sendAsynchronousRequest:[requestsArray objectAtIndex:0] 
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:handler];

或者您可以在异步块中同步执行所有请求:

dispatch_queue_t callerQueue = dispatch_get_current_queue();
dispatch_queue_t downloadQueue = dispatch_queue_create("Lots of requests", NULL);
    dispatch_async(downloadQueue, ^{
        for (NSRURLRequest *request in requestsArray) {
            [dataArray addObject:[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]];
        }
        dispatch_async(callerQueue, ^{
            [self doSomethingWithDataArray:dataArray];
        });
    });
});

附:如果您使用其中任何一个,您应该添加一些错误检查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSURLConnection sendAsynchronousRequest:queue:completionHandler:连续发出多个请求? 的相关文章

随机推荐

  • 使用绝对时区的Javascript倒计时?

    我有一个 javascript 倒计时器 它通过获取指定的日期和时间并将其与当前日期和时间进行比较来工作 问题是 当前时间是相对于用户时区的 因此用户之间的剩余时间是不同的 如何让计时器倒计时到特定时区的某个时间 在我的例子中为 GMT 5
  • Java 的 MessageFormat 未本地化小写日期中的葡萄牙月份

    月份名称以大写字母而不是小写字母开头 正如他们应该的那样 https meta wikimedia org wiki Capitalization of Wiktionary pages Capitalization of month na
  • 关系的时间复杂度 T(n) = T(n-1) + T(n/2) + n

    对于关系 T n T n 1 T n 2 n 我可以先解出项 T n 1 n 它给出 O n 2 然后解出项 T n 2 O n 2 吗 根据主定理 它也给出了 O n 2 或者它是错误的 不 你不能用主定理来解决它 你需要使用来解决它阿克
  • 创建一个对象,其类型在字符串参数中

    我有一个 TreeView 其中包含节点 当用户单击某个节点时 应创建并显示相应的 CrystalReport 文档 例如 我的节点名称是 PeriodReport1 PeriodReport2 PeriodReport3 我的 Cryst
  • 无法找到并单击条件条款按钮

    我是 pupeeteer 的新手 首先我要做的是加载页面并单击按钮 但是 它无法找到该元素 我认为这是因为我需要找到父元素或父元素的父元素
  • Asp.net Mvc 4 和 Web Api 中的路由

    我可以同时使用以下两个路由规则吗 config Routes MapHttpRoute name ActionApi routeTemplate api controller action id defaults new id RouteP
  • IE11 中奇怪的 @font-face 问题(仅在您检查开发人员工具中的元素后才呈现)

    我有一些网络字体可以在除 IE11 之外的所有浏览器中正常工作 奇怪的是 如果你进入这个页面 然后使用 IE11 开发人员工具检查 功能 要点 突然所有字体都可以工作了 有任何想法吗 font face font family Helvet
  • POSIX“tee”命令如何工作?

    tee newOutputFile lt existingInputFile gt newOutputFile2 究竟会怎样tee接受论点 会是这样吗 Tee将首先处理newOutputFile lt existingInputFile所以
  • CSS3连续旋转动画(就像加载日晷)

    我正在尝试使用 PNG 和 CSS3 动画来复制 Apple 风格的活动指示器 日晷加载图标 我让图像旋转并连续进行 但动画完成后在进行下一次旋转之前似乎有延迟 webkit keyframes rotate from webkit tra
  • JfreeChart 中的自动缩放 Y 轴

    我在用JFreeChart在我的 Java 应用程序中创建蜡烛图 然而 我的图表最终看起来像这样 http imageshack us photo my images 69 capturebhx png http imageshack us
  • 出现分段错误

    我看到很多关于出现分段错误在SO中的C程序中 我认为参考这里的内容会很棒 这是一个涉及某些导致分段错误的情况的问题 我的答案发布在下面 正如一些答案中所写 所有情况下的行为都是未定义的 尽管很多人都将他们视为分段故障 所以这个问题是关于是什
  • 如何有条件地使用“平面图”运算符? (角度2/rxjs)

    我想要实现的是有条件地运行一系列可观察的结果 return observable map response gt response flatmap response1 gt observable1 response1 flatmap res
  • 找不到符号 if 语句错误

    我一直在编写一个小程序来娱乐 但我收到了这个错误 Compilation error time 0 11 memory 380672 signal 0Main java 22 error cannot find symbol string
  • 从列表中选择 5 个不同的元素?

    从 python 列表中选择 5 个不同元素并将它们添加到新列表中的最佳方法是什么 谢谢您的帮助 假设您希望随机选择它们并且new list已经定义了 import random new list random sample old lis
  • 如何实现隐式方法的中间类型?

    假设我想提供方法foo在现有类型上A在我的控制之外 据我所知 在 Scala 中执行此操作的规范方法是实现从A到某种实现的类型foo 现在我基本上看到两个选择 为此目的定义一个单独的 甚至可能是隐藏的类 protected class Fo
  • 当用户拒绝地理定位服务时,我会收到拒绝事件吗?

    我的意思是 如果我在网页上有一个按钮 当用户单击该按钮时 然后就可以获取用户的地理位置信息 但在此之前 浏览器会询问用户是否接受使用地理定位服务 如果用户拒绝地理定位服务 我可以获得拒绝事件吗 Yes Example navigator g
  • 如何通过nodejs实现APNS通知?

    现在有人有一个很好的 npm 模块来实现 Apple PUSH 通知吗 一个简单的例子就很好了 我找到的解决方案如下 它使用apn module var apn require apn var ca entrust 2048 ca cer
  • 将一个函数中的可变参数传递给 D 中的另一个函数

    我有一个可变的 D 风格函数foo format 这是一个包装器writefln 我想做这样的事情 foo format lt gt writefln format 本质上 将省略号参数传递给 writefln 我知道这在 C C 中并不容
  • 在 Android KitKat 中接收彩信

    所以这个视频Android 4 4 短信 API http www youtube com watch v mdq0R2WQssQ DevBytes 解释了 KitKat 中 SMS API 的最新变化 他们还提供了示例项目的链接 http
  • NSURLConnection sendAsynchronousRequest:queue:completionHandler:连续发出多个请求?

    我一直在使用NSURLConnection s sendAsynchronousRequest queue completionHandler 方法很棒 但是 我现在需要连续发出多个请求 我怎样才能在仍然使用这个伟大的异步方法的同时做到这一