NSURLSession delegateQueue的maxConcurrentOperationCount如何影响任务concurency

时间:2016-10-01 13:37:40

标签: ios objective-c multithreading cocoa-touch afnetworking

我正在使用AFNetworking 3.0,它使用NSURLSessionDataTask以及一个operationQueue(AFURLSessionManager的属性),它被用作NSURLSession

的delegateQueue

如此简单地把

AFURLSessionManager.operationQueue == NSURLSession.delegateQueue

AFNetworking 3代码

self.operationQueue = [[NSOperationQueue alloc] init];
self.operationQueue.maxConcurrentOperationCount = 1;
self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue];

来自Apple文档。到NSURLSession delegateQueue

用于调度委托调用和完成处理程序的操作队列。队列不必是串行队列。如果为nil,则会话创建一个串行操作队列,用于执行所有委托方法调用和完成处理程序调用。

设置self.operationQueue.maxConcurrentOperationCount = 4;表示会有最大值。 4同时处理NSURLSessionDataTask?并将其设置为= 1(默认为AFNetworking)意味着当时只有一个任务,它必须完成另一个任务才能开始?

或者我错了,这只影响委托消息传递,这意味着将其设置为4可以触发4个不同线程上的委托回调...并且设置为1意味着回调始终在同一个线程上,但无论如何都要同时处理任务

1 个答案:

答案 0 :(得分:4)

该队列是委托队列,因此它应该只影响委托消息传递。

创建NSURLSession时,为其提供类型为NSURLSessionConfiguration的配置对象。

NSURLSessionConfiguration包含一个属性HTTPMaximumConnectionsPerHost,可让您控制与单个主机的同时连接数。这是我所知道的唯一可以控制连接数的机制。