我应该有多个AFHTTP客户端来组织我的代码

时间:2013-07-17 15:44:55

标签: iphone ios objective-c afnetworking

我们正在使用AFNetworking从我们的移动应用程序发出版本化的API请求。

为了定位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个巨型客户端类,是否会产生大量内存开销?在设计这个系统时,我认为只在必要时按需创建APIClients是有利的。如果用户打开应用程序并且从未登录,那么我永远不需要加载负责创建会话的代码。如果我的所有网络代码都填充在一个文件中,那么当用户第一次执行任何需要HTTP请求的操作时,所有网络代码都会立即加载到内存中。

1 个答案:

答案 0 :(得分:0)

我认为主要问题是你的客户端并且在实例化之后从未发布过(单例保留指向自己的指针吗?)。然后,您将在应用程序的生命周期内将所有这些对象保留在内存中。也可能更难维护。

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

我要做的是拥有一个文件:

  • 在init期间为每个版本实例化客户端
  • 拥有选择正确客户端的调用方法,以便调用此方法的对象,并集中处理版本的位置。

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