第五个NSURLConnection的代理不叫
我在我的应用程序中使用NSURLConnection
进行下载。它工作正常。当我开始连接代表方法第五个NSURLConnection的代理不叫
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse*)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
被调用。
但是,当连接的数目变得更多然后4然后为第五连接委托方法不调用,直到委托方法“connectionDidFinishLoading
”被调用任何前四个连接的(指任何四个连接中的一个具有完成)。然后第五个连接的代表(didReceiveResponse
和didReceiveData
)开始被调用。简而言之,我的NSURLConnection
是委托方法,一次只能调用4个连接。
我只是想知道有没有什么办法可以增加这个限制,让更多的4(可能是8或9)连接的代表一次被调用?这是iOS的限制或我的应用程序有问题。
检查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];
希望这会对您有所帮助。
你不能用NSURLConnection(实际上)修复它,但如果你使用NSURLSession代替,你可以平凡地解决这个问题。
NSURLSession API允许您控制每个服务器的最大并发请求数。只需在会话配置对象上设置HTTPMaximumConnectionsPerHost属性,然后根据该配置创建会话,然后在该会话内创建任务,就像创建NSURLConnection对象一样。
您是否在多台服务器上测试了这一点,并且使用了不同的网络基础设施(不同的LAN和ISP等)? – trojanfoe
我会建议你使用[AFNetworking](https://github.com/AFNetworking/AFNetworking)而不是'NSURLConnection'。我认为这会让你的生活更轻松。 – rob180