2016-10-01 60 views
3

我'使用AFNetworking 3.0,它使用NSURLSessionDataTask也是一個operationQueue(該AFURLSessionManager的屬性),其被用作delegateQueue爲NSURLSession如何進行NSURLSession delegateQueue影響任務併發性的maxConcurrentOperationCount

所以簡單地說

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委託隊列

調度委託調用和完成處理程序的操作隊列。隊列不必是串行隊列。如果爲零,會話將創建一個串行操作隊列以執行所有委託方法調用和完成處理程序調用。

確實設置了self.operationQueue.maxConcurrentOperationCount = 4;意味着會有最大值。 4同時處理NSURLSessionDataTask?並將其設置爲= 1(AFNetworking的默認值)表示當前只有一個任務,並且必須完成另一個任務才能開始?

或者我錯了,這隻影響委託消息傳遞,意味着將其設置爲4可以在4個不同的線程上觸發委託回調...並設置爲1意味着回調總是在相同的線程,但任務仍然同時處理

+0

上面的Apple文檔的報價中是否存在拼寫錯誤?而不是「隊列不需要是串行隊列」,它應該是「隊列應該是串行隊列」。很明顯,我不敢編輯它,因爲擔心我錯過了一些東西。 https://developer.apple.com/documentation/foundation/nsurlsession/1411597-sessionwith配置 – SimSim

回答

3

該隊列是委託隊列,因此它應該隻影響委託消息傳遞。

當您創建NSURLSession時,您爲其指定NSURLSessionConfiguration類型的配置對象。

NSURLSessionConfiguration包含一個屬性HTTPMaximumConnectionsPerHost,它允許您控制同時連接到單個主機的數量。這是我知道的唯一機制,可以讓你控制連接的數量。

+0

偉大的,感謝您指出HTTPMaximumConnectionsPerHost,這應該也反映在AFNetworking作爲operationQueue屬性是相當誤導 –

+0

在這裏添加https:// github.com/AFNetworking/AFNetworking/issues/3720 –

+1

我剛剛發表了評論,您的評論github董事會。 AFNetworking的Queue財產不應該是公開的;這是它的名字不好,因此誤導和混亂。 –