2013-07-17 34 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

我认为主要问题是你的客户和实例化后永远不会释放(单身人士保留一个指向自己的权利?)。然后,您将在应用程序的整个生命周期中将所有这些对象保留在内存中。也可能难以维持。

你有几个版本?因为简单的步骤可以减少每个版本的客户端,而不是每个对象,并且该对象只调用正确的版本。

我会做的虽然是有一个文件:

  • 实例化初始化期间,每个版本的客户端
  • 有呼叫的方法是选择合适的客户端,以便对象调用此方法你集中处理版本的地方。

此外,如果它只设置请求头,也许你可以只有一个客户端,并在调用中设置正确的头。这样你就不会让多个客户端实例化。

相关问题