簡體   English   中英

AFHTTPRequestOperationManager是否在operationQueue上運行請求?

[英]Does AFHTTPRequestOperationManager run requests on the operationQueue?

如果我有一個經理創建和實例變量,我做:

AFHTTPRequestOperation *operation = [self.manager HTTPRequestOperationWithRequest:request success:mySuccessBlock failure:myFailureBlock];

[operation start];

這會在經理的operationQueue上運行嗎? 我似乎無法找到任何保證它將使用GET,POST,PUT方法之一,而我假設將把操作添加到隊列。

我在這里看到了mattt的答案,但我想確定這種或那種方式。

如何使用AFNetworking 2以嚴格的順序發送請求?

我要做的是排隊請求並讓它們通過設置同步運行

[self.manager.operationQueue setMaxConcurrentOperationCount:1]; 

如果要對隊列運行操作,則必須將操作顯式添加到隊列:

AFHTTPRequestOperation *operation = [self.manager HTTPRequestOperationWithRequest:request success:mySuccessBlock failure:myFailureBlock];

[queue addOperation:operation];

這假設你要創建一個隊列:

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.name = @"com.domain.app.networkQueue";
queue.maxConcurrentOperationCount = 1;

如果你只是在沒有將它們添加到隊列的情況下啟動操作(例如[operation start] ),它們就會運行,而不會遵循任何特定的隊列參數。

注意,您也可以將操作添加到操作管理器的隊列中(您可以設置maxConcurrentOperationCount ,正如您在問題中提到的那樣):

[self.manager.operationQueue addOperation:operation];

這使您無需創建自己的隊列。 但它假設您對該manager 所有其他AFNetworking請求也將連續運行。 就個人而言,我將單獨留下manager.operationQueue ,並為我需要串行操作的邏輯創建一個專用隊列。

最后一點:使用串行網絡操作會對並發請求造成嚴重的性能損失。 我會從你的問題中假設你絕對需要按順序進行,但總的來說我現在設計我的應用程序以盡可能使用並發請求,因為它是一個更好的用戶體驗。 如果我需要一個特定的操作是串行的(例如登錄),那么我用操作依賴或完成塊來做,但應用程序的其余部分盡可能運行並發網絡請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM