2014-02-24 45 views
4

如果我有一個管理器創建和實例varred和我做的:AFHTTPRequestOperationManager是否在operationQueue上運行請求?

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

[operation start]; 

就會對管理者的operationQueue這個運行?我似乎無法找到任何保證它會使用GET,POST,PUT方法之一而不是我認爲將操作添加到隊列的方法。

我看到mattt的答案在這裏,但我想確定一種方式或其他。

How send request with AFNetworking 2 in strict sequential order?

我試圖做的是排隊的請求,並讓他們通過設置

[self.manager.operationQueue setMaxConcurrentOperationCount:1]; 

回答

8

同步運行。如果你想在隊列中運行的操作,你必須明確地加操作隊列:

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]; 

這可以節省您不必創建自己的隊列。但它然後假設所有您的其他AFNetworking此manager AFNETworking請求也將連續運行。就我個人而言,我會離開manager.operationQueue,爲我的邏輯創建一個專用隊列,需要串行操作。

最後一點:使用串行網絡操作會對併發請求造成嚴重的性能損失。我會從你的問題中假設你絕對需要串行化,但總的來說,我現在設計我的應用程序以儘可能使用併發請求,因爲它是一個更好的UX。如果我需要一個特定的操作是串行的(例如登錄),那麼我需要使用操作依賴或完成塊,但是應用程序的其餘部分在可能的情況下運行併發網絡請求。

+0

感謝您的回答Rob! –

相關問題