2014-01-25 84 views
4

我使用AFNetworking爲我的應用程序中的所有連接。我創建了一個單獨的「客戶」類,負責所有AFNetworking代碼並使用AFHTTPRequestOperationManager。我很困惑的是,AFHTTPRequestOperationManager對象應該是一個屬性,還是我應該每次重新創建一個我的客戶端被要求連接?如果它是一個屬性,我的客戶可以被異步調用多次,否則會導致問題,因爲可能同時使用同一個實例AFHTTPRequestOperationManagerAFHTTPRequestOperationManager屬性還是不在共享客戶端?

+0

@DavidCaunt我還沒有嘗試過一個屬性,但我嘗試將管理器存儲到一個實例變量,訪問崩潰不好。出於某種原因,我分配給我的變量的實例死亡。所以我認爲在使用(局部變量)時初始化一個新的管理器會更好(這是我所做的修復)。順便說一下,我使用ARC,因此實例變量應該有一個強指針,以指向默認分配的對象,就像強屬性的工作方式一樣。 – cessmestreet

回答

4

通常,您的單身'客戶'類將是AFHTTPRequestOperationManager的子類。它也可能是一個屬性,但是你將無法覆蓋方法。一些常用重載方法有:

  • - HTTPRequestOperationWithRequest:success:failure:,修改所有請求操作是如何構造(例如,如果你需要在每一個請求相同的報頭)
  • – initWithBaseURL:,申請額外定製的運營經理

也就是說,一個屬性可以正常工作,這取決於您的需求。 (對於一些令人愉快的週末閱讀見Prefer composition over inheritance?。)

最後:

如果它是一個屬性,可以在我的客戶端異步調用了很多次,還是將這一事業的問題,因爲AFHTTPRequestOperationManager相同的實例將可能在同一時間使用?

是的,AFHTTPRequestOperationManager被設計爲線程安全的。你可以告訴它做不同線程的東西。 (請注意,它的完成塊總是在主線程中調用,因爲UI工作通常是在那裏完成的。)

+0

我選擇不要繼承'AFHTTPRequestOperationManager',因爲最終我想在我的應用程序丟棄iOS6支持時切換到'AFURLSessionManager'。有一箇中立的客戶似乎更適合平穩過渡(但我可能會誤會)。我會接受你的問題來回答有關'AFHTTPRequestOperationManager'是線程安全的問題。 – Koen

+0

@Koen是的,這是使用屬性的一個很好的理由。但是,爲了爭論,您可以使用子類化並對類集羣執行相同的操作。 (你的類可以根據當前的iOS版本返回不同的子類實例。) –