2013-07-17 31 views
0

我們正在使用AFNetworking從我們的移動應用程序進行版本化的API請求。我應該有多個AFHTTPClient來組織我的代碼

爲了定位我們API的特定版本,我們的應用程序發送了一個特殊的Accept Header。

我組織了我的代碼庫,以便每個資源(用戶,會話,圖像等)都有自己的AFHTTPClient,它在初始化時設置Accept頭。

+ (UsersAPIClient *)sharedClient 
{ 
    // removed singleton setup code for brevity 
                   // here's where my version gets set for all requests pertaining to Users 
    __sharedClient = [[UsersAPIClient alloc] initWithBaseURL:url andVersion:2]; 
    return __sharedClient; 
} 

我將它設置了這種方式使每一個請求(創建用戶,編輯用戶,獲得用戶),就不必擔心調用哪個版本;當特定的APIClient被創建時,這已經完成了。

該系統運行良好,但我只是質疑這是我應該如何做到這一點?我們有大約9個對象,因此在BaseAPIClient類的頂部有18個文件(.h,.m),所有東西都從中繼承。

我的所有網絡代碼是否應該放在一個文件中,並且每個請求在發出請求之前設置相應的Accept Header?通過加載9個不同的客戶端類而不是加載1個巨型客戶端類,是否會產生巨大的內存開銷?在設計這個系統時,我認爲只有在需要和需要時創建APIClient纔是有利的。如果用戶打開該應用並且從不登錄,那麼我永遠不需要加載負責創建會話的代碼。如果我的所有網絡代碼都塞滿了一個文件,那麼當用戶第一次做任何需要HTTP請求的事情時,所有的網絡代碼都會一次加載到內存中。

回答

0

我認爲主要問題是你的客戶和實例化後永遠不會釋放(單身人士保留一個指向自己的權利?)。然後,您將在應用程序的整個生命週期中將所有這些對象保留在內存中。也可能難以維持。

你有幾個版本?因爲簡單的步驟可以減少每個版本的客戶端,而不是每個對象,並且該對象只調用正確的版本。

我會做的雖然是有一個文件:

  • 實例化初始化期間,每個版本的客戶端
  • 有呼叫的方法是選擇合適的客戶端,以便對象調用此方法你集中處理版本的地方。

此外,如果它只設置請求頭,也許你可以只有一個客戶端,並在調用中設置正確的頭。這樣你就不會讓多個客戶端實例化。

相關問題