获取多个依赖于前一个的json对象时最好使用NSUrlConnection

时间:2013-07-14 16:44:29

标签: objective-c json nsurlconnection querying

我正在做的是我正在查询API以搜索各种数据库中的文章。涉及多个步骤,每个步骤都返回一个json对象。每个步骤都涉及NSUrlConnection,其中包含API的不同查询字符串

步骤1:返回指示查询状态的json对象&记录集ID。

步骤2:从步骤1获取记录集ID并返回对查询有效的数据库列表

步骤3:查询从步骤2准备好的每个数据库,并获取具有结果的json数据数组

我很担心这个问题的最佳方式。是否最好使用一个nsurlconnection并重新打开连接中的连接,根据我所处的步骤完成加载。或者最好在每个后续连接结束时打开一个新连接?

2 个答案:

答案 0 :(得分:1)

一些观察

  1. 网络延迟:

    我们需要对此敏感的关键现象(听起来像你)是网络延迟。我们经常在一个想法场景中测试我们的应用程序(在具有高速互联网访问的模拟器上,或在连接到wifi的设备上)。但是,当您在真实场景中使用应用程序时,网络延迟会严重影响性能,您需要构建一个最小化此问题的解决方案。

  2. 模拟次优,真实世界的网络情况:

    顺便说一下,如果您还没有这样做,我建议您安装“网络链接调节器”,它是“硬件IO工具”的一部分(可从“Xcode”菜单中选择“打开”开发人员工具“ - ”更多开发人员工具“)。如果您安装“网络链接调节器”,您可以让您的模拟器模拟各种网络体验(例如良好的3G连接,边缘连接不良等)。

  3. 尽量减少网络请求:

    无论如何,我试图弄清楚如何最小化依赖于前一个请求的单独请求。例如,我看到第1步和第2步,并想知道是否可以将这两者合并为一个JSON请求。也许那是不可能的,但希望你能得到这个想法。您希望减少必须按顺序发生的单独请求的数量。

    我还会看第3步,看起来他们必须依赖第2步,但也许你可以同时运行这些第3步请求,减少那里的延迟效应。

    < / LI>
  4. 实现:

    就如何实现这一点而言,我个人使用具有一些合理NSOperationQueue设置的并发maxConcurrentOperationCount(例如4或5,足以享受并发性和减少延迟,但不是很多对设备或服务器征税并提交网络操作。在这种情况下,您可能会提交步骤1,其中包含将提交步骤2的完成操作,其中完成操作将提交一系列步骤3请求,并且这些步骤3请求可能会并发运行。

    就如何制作一个好的网络操作对象而言,我可能会建议使用类似AFNetworking的东西,它已经有一个不错的网络操作对象(包括一个解析JSON的对象),所以也许你可以从那里开始。

    在重用NSURLConnection方面,通常是每个请求一个连接。如果我有一个想要与服务器进行冗长消息交换的应用程序(例如,您希望服务器能够随时向客户端发送消息的聊天服务,例如在聊天服务中) ,我已经完成了套接字实现,但这似乎不是正确的架构。

答案 1 :(得分:1)

我会关闭第一个连接并为每个连接创建一个新连接。

只是,不要问我为什么。

顺便说一句,我会理解这个问题,如果这是关于重用而不是在某些性能敏感的上下文中创建新对象,比如滚动表格或动画,或者它是否只发生了大约10万次迭代。但是你要讨论的是3个对象,要么创建新对象,要么重用旧对象。甚至考虑它的收获是什么?