哪个更好地将 AFNetworking 函数包装在一个文件中或在单独的文件中使用它,

which one is better to wrap AFNetworking functions in one file or use it in separate files,

我正在使用 AFNetworking 作为网络库。有两种不同的编码风格,我不知道哪种更好。

  1. 将所有与网络关联的函数打包到一个文件中。 例如,我有一个名为 API.m 的单例文件,我包装了 login 函数,如下所示:

    - (void) login:(NSString *)username withPassword:(NSString *)password
      andCompletionBlock:(void(^)(NSString*))block andFailBlock:(void(^)())failBlock
    {
      NSMutableString *url = [[NSMutableString alloc] initWithCapacity:10];
      [url appendString:LOGINURL];
    
      NSURL* nurl = [NSURL URLWithString:url];
      NSURLRequest *request = [NSURLRequest requestWithURL:nurl];
      AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
      [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSString *requestTmp = [NSString stringWithString:operation.responseString];
        block(requestTmp);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        failBlock();
      }];
      [operation start];
    }
    

然后在LoginViewController,我可以调用这个函数来完成我的登录工作:

    [[ServerAPI Instance] login:@"hello" withPassword:@"world" 
    andCompletionBlock:^(NSString *str) {} failBlock^(){}];
  1. 直接在单独的视图控制器中编写网络进程代码。

哪种编码风格更好?

创建单独的模型来处理您的 API 层总是比在视图控制器中编写网络代码要好。当您想在多个地方使用相同的网络调用时尤其如此。

话虽如此,可能有更好的方式来编写您的网络,而不是笼统的、多用途的单例。考虑创建单独的模型,例如 User 模型,其实例表示已登录 User,并且还具有用于登录、注销、凭据保存、刷新等的便捷方法。因此,您可以使代码与用户相关在用户 class.