[英]AFNetworking - AFHTTPRequestOperationManager does not return data
[英]Does AFHTTPRequestOperationManager run requests on the operationQueue?
如果我有一個經理創建和實例變量,我做:
AFHTTPRequestOperation *operation = [self.manager HTTPRequestOperationWithRequest:request success:mySuccessBlock failure:myFailureBlock];
[operation start];
這會在經理的operationQueue上運行嗎? 我似乎無法找到任何保證它將使用GET,POST,PUT方法之一,而我假設將把操作添加到隊列。
我在這里看到了mattt的答案,但我想確定這種或那種方式。
我要做的是排隊請求並讓它們通過設置同步運行
[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.