确保在发送其他请求之前完成初始网络请求的最佳方法(iOS 应用程序)

FyZ*_*ZyX 2 networking ios swift

我正在开发的应用程序需要在服务器上创建一个容器对象并将项目插入到该容器中。在需要插入第一个项目之前,我不想创建容器对象。但是,创建容器对象需要进行一些初始化,这可能需要一些时间。当该容器仍在初始化时,用户仍然可以发送由于容器尚未准备好而未得到处理的插入请求。我有两个主要问题:

\n\n
    \n
  1. 应该在客户端还是服务器端处理这个问题?
  2. \n
  3. 处理此类问题的最佳实践是什么?
  4. \n
\n\n

本质上,我需要确保在发送createContainer任何请求之前完成初始数据任务。insertItem

\n\n

附加信息

\n\n

insertItem通过单击相应的 来发送请求tableViewCelltableViewCell用户单击的第一个请求会发送一个createContainer请求,该请求创建一个包含第一个项目的容器。

\n\n

对于容纳n个物品的容器,应按以下顺序发送请求:

\n\n
    \n
  • createContainer(Container(with: item1)
  • \n
  • insertItem(item2)
  • \n
  • ...
  • \n
  • insertItem(itemn)
  • \n
\n\n

第一个请求完成后,剩余的n \xe2\x80\x93 1 个请求可以按任意顺序完成。

\n\n

我的想法

\n\n

听起来我希望createContainer同步处理请求,而insertItem应该异步处理请求。我不确定这是否是最好的方法,甚至不确定如何正确执行该方法,因此我们将不胜感激。

\n

nag*_*rrr 5

您可以使用一个NSOperationQueue和多个NSOperations 来实现您想要的行为。一个NSOperation实例可以依赖于另一个NSOperation实例的完成:

依赖关系

必须在当前对象开始执行之前完成执行的操作对象的数组。

对于您的示例,这意味着 -OperationsinsertItem取决于操作createContainer

当您将所有这些操作添加到一个操作时,NSOperationQueue您的createContainer操作将首先运行。当它完成后,其他操作将开始运行,因为它们的依赖关系现已满足。maxConcurrentOperationCount您还可以使用on控制要同时运行的操作数量NSOperationQueue

由于您将在您的NSOperations 中使用异步 API,因此您需要自己实现ConcurrentOperation并处理状态更改。API 参考对此进行了非常详细的解释。

查看NSOperation 的 API 参考以获取更多信息。还有一篇关于 NSOperations 的 NSHipster 文章