仅在iOS 5中,我正在处理的应用程序似乎在异步发送大量请求时丢弃请求。大意义仍然相当小 - 现在用30测试
每个请求都使用它自己的NSURLConnection,并且预计会相对快速地返回(即300 ms - 2s)。我们也保持一个连接长时间打开。
似乎每个第5个连接都无法离开设备。它当然永远不会到达服务器,使用Charles的网络调试甚至不会显示请求。
我想知道是否有人知道同时打开的NSURLConnection对象和活动请求数量的限制?
值得注意的是,我们在iOS 4中没有看到这个问题。似乎如果我们终止我们的长期连接,那么我们不会再丢弃每个第5个请求。
答案 0 :(得分:4)
NSOperationQueue
是管理此问题的最佳方式。简而言之,您将NSURLConnection
包裹在NSBlockOperation
中,然后将其添加到队列中。该队列允许您设置各种属性,例如最大并发连接数,并且还为您提供了一种取消排队操作的简便方法。
WWDC视频(2012)中的这种设计模式有一个很好的介绍,名为“在iOS上构建并发用户界面”。
在iOS 5中,您可以使用以下调用启动NSURLConnection
并将其添加到NSOperationQueue
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler