使用 NSURLConnection 及其回调的良好做法? Objective-C

Good practice using NSURLConnection and its callbacks? Objective-C

我真的没有当前的问题,而是一个我似乎无法找到满意答案的问题。

在 objective-c 中处理 NSURLConnection 的回调和调用时使用什么好的做法?让我们看一些例子。

假设我有 3 个不同的 ViewController,我创建了一个 class,它使用 NSURLConnection 进行网络调用,以便从某个站点获得 JSON。所有 3 VC 都将进行不同类型的网络调用。如何在不必重复代码或让网络处理全部分散的情况下做到这一点?如果我需要根据上一次调用的结果进行更多网络调用怎么办?

我使用普通的 NSURLConnection 委托,例如 didReceiveResponsedidReceiveDataconnectionDidFinishLoading 等。所以我所做的是将 statusCode 存储在 didReceiveResponseconnectionDidFinishLoading 我调用了一个我命名为 handleResponse 的函数,它检查 statusCode,如果 statusCode 表明调用成功,我翻译 NSData* 对象,我存储了从 didReceiveData代表。这一切都很好,但是我翻译的数据我想发送到正确的 viewController.

有几个选项可以做到这一点:

  1. 我让 NSURLConnection 调用的委托是 ViewController 本身。这很糟糕,因为我必须复制 每个 VC 中的 NSURLConnection 代码我想进行网络调用, 显然。
  2. 或者我可以处理执行网络 class 中的所有数据 NSURLConnection 调用。这很糟糕,因为我在 网络 class,我真的不想要那个?这也要求网络 Class 知道它可能不应该知道的 classes 和数据结构。这是一个网络 class,除了网络之外不应该做任何事情。
  3. 我现在第一次尝试的最终方法是让 ViewController 告诉网络 class 它想制作一个 NSURLConnection 调用,并设置一个 NSNotification 消息 网络 class 应该在 handleResponse 方法中调用我 较早前提过。网络 class 发送它收到的数据 通过 NSNotification 和处理数据的逻辑 落在请求的 VC 上。对我来说这是最合乎逻辑的 感觉像是一种不错的做事方式。

解决方案 3 的问题是我必须有不同的 Notification 方法来处理不同类型的数据,这可能会导致很多这样的方法。如果不同的 VC 也使用与另一种 NSNotification 方法相同的数据处理,那么我也必须复制该代码。一般来说,我对使用 NSNotification 还很陌生,对它的缺点不是很了解。

最后一个问题,假设我想进行 4 个不同的 NSURLConnection 调用,一个接一个被确认完成并成功。你会怎么做?我已经这样做了几次,但它最终以枚举形式作为计数器来跟踪刚刚进行的网络调用以及下一个应该进行的网络调用,这会导致 switch 语句执行某些代码,具体取决于这是刚刚执行的。我在考虑是否可以实现某种队列,该队列按顺序处理所有调用。

感谢任何类型的输入!

大多数(如果不是全部)这些问题都可以通过 AFNetworking 解决。特别是有关必须重复请求或连接的问题。

最后一个问题,比如你可以用blocks来做 AFNetworking提供了这样的结构,所以你可以专门协调多个调用。

AFNetworking

那里有很多教程,库 github 站点的简短文档提供了简短、简洁且易于理解的示例。开始使用它需要几分钟时间。