5

仅在 iOS 5 中,当我异步发送大量请求时,我正在处理的应用程序似乎会丢弃请求。大的意义仍然很小 - 现在用 30 进行测试

每个请求都使用它自己的 NSURLConnection 并且预计会相对快速地返回(即 300 ms - 2s )。我们还会长时间保持一个连接打开。

似乎每 5 个连接都无法离开设备。它当然永远不会到达服务器,使用 Charles 进行网络调试甚至不会显示请求已发出。

我想知道是否有人知道同时打开的 NSURLConnection 对象和活动请求的数量限制?

值得注意的是,我们在 iOS 4 中没有看到这个问题。似乎如果我们终止我们的长期连接,那么我们不会再丢弃每 5 个请求。

4

1 回答 1

4

NSOperationQueue是解决此问题的最佳方法。简而言之,您将您的包装NSURLConnection在一个 中NSBlockOperation,然后将其添加到队列中。队列允许您设置各种属性,例如同时连接的最大数量,并为您提供一种取消排队操作的简单方法。

在名为“Building Concurrent User Interfaces on iOS”的 WWDC 视频 (2012) 中有一个很好的介绍这种设计模式。

在 iOS 5 中,您可以使用以下调用来启动 anNSURLConnection并将其添加到NSOperationQueue

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

于 2012-09-12T20:50:13.717 回答