第五个NSURLConnection的代理不叫

第五个NSURLConnection的代理不叫

问题描述:

我在我的应用程序中使用NSURLConnection进行下载。它工作正常。当我开始连接代表方法第五个NSURLConnection的代理不叫

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse*)response 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
- (void)connectionDidFinishLoading:(NSURLConnection*)connection 

被调用。

但是,当连接的数目变得更多然后4然后为第五连接委托方法不调用,直到委托方法connectionDidFinishLoading被调用任何前四个连接的(指任何四个连接中的一个具有完成)。然后第五个连接的代表(didReceiveResponsedidReceiveData)开始被调用。简而言之,我的NSURLConnection是委托方法,一次只能调用4个连接。

我只是想知道有没有什么办法可以增加这个限制,让更多的4(可能是8或9)连接的代表一次被调用?这是iOS的限制或我的应用程序有问题。

+0

您是否在多台服务器上测试了这一点,并且使用了不同的网络基础设施(不同的LAN和ISP等)? – trojanfoe

+0

我会建议你使用[AFNetworking](https://github.com/AFNetworking/AFNetworking)而不是'NSURLConnection'。我认为这会让你的生活更轻松。 – rob180

检查http://blog.lightstreamer.com/2013/01/on-ios-url-connection-parallelism-and.html

的iOS有 相同的终点并发NSURLConnections的数量限制吗?没有?也许你应该,我们发现它很难。

它们还提供线程池实现来绕过此限制。

我认为你应该安排这些连接到手动创建的队列以外的默认的,以避免潜在的影响。这对我来说很有用。以下是您可以尝试的示例代码:

NSURLRequest *request; // a URL request 
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // manual create queue to schedule your URL connections 
queue.maxConcurrentOperationCount = 10; // configure the max count 

// by specifying NO for the #startImmediately# parameter, 
// you can schedule an connection on the queue you like before it starts. 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; 
[connection setDelegateQueue:queue]; 
[connection start]; 

希望这会对您有所帮助。

+0

这没有帮助。根据定义,操作队列中的并发操作数量只能减少在队列中运行的并发NSURLConnection请求的数量,而不会增加它。 – dgatwood

+0

没关系。我误解了这一点,并认为你在操作队列中使用了一种与同步请求不同的(可怕的)技术。你的方法*可能会工作。使用NSURLSession仍然可能会更好,它不仅可以提供这种支持,而且实际上是由Apple记录的。 :-) – dgatwood

你不能用NSURLConnection(实际上)修复它,但如果你使用NSURLSession代替,你可以平凡地解决这个问题。

NSURLSession API允许您控制每个服务器的最大并发请求数。只需在会话配置对象上设置HTTPMaximumConnectionsPerHost属性,然后根据该配置创建会话,然后在该会话内创建任务,就像创建NSURLConnection对象一样。