我在我的应用中使用NSURLConnection
进行下载。它工作正常。当我开始连接时委托方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse*)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
被叫。
但是当连接数变得超过4时,对于第5个连接,委托方法在调用委托方法" connectionDidFinishLoading
" 之前不会调用对于前四个连接中的任何一个(意味着任何四个连接中的一个已完成)。然后第五个连接的代理(didReceiveResponse
和didReceiveData
)开始被调用。简而言之,我的NSURLConnection
是委托方法,一次只调用4个连接。
我只是想知道有没有办法可以增加这个限制,以便一次调用超过4个(可能是8或9个)连接的代理?这是iOS的限制还是我的应用程序有问题。
答案 0 :(得分:2)
检查http://blog.lightstreamer.com/2013/01/on-ios-url-connection-parallelism-and.html
iOS对并发NSURLConnections的数量有限制 相同的终点?没有?也许你应该,我们发现它很难。
他们还提供了一个线程池实现来绕过这个限制。
答案 1 :(得分:0)
我认为您应该将这些连接安排到手动创建的队列而不是默认队列,以避免潜在的影响。这对我来说很有用。以下是您可以尝试的示例代码:
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];
希望这会有所帮助。
答案 2 :(得分:0)
您无法使用NSURLConnection(实际上)修复它,但如果您使用NSURLSession,则可以轻松解决问题。
NSURLSession API允许您控制每台服务器的最大并发请求数。只需在会话配置对象上设置HTTPMaximumConnectionsPerHost属性,然后根据该配置创建会话,然后在该会话中创建任务,就像创建NSURLConnection对象一样。