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

标签 ios swift networking

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

  1. 这应该在客户端还是服务器端处理?
  2. 处理此类问题的最佳做法是什么?

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

附加信息

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

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

  • createContainer(Container(with: item1)
  • 插入项目(item2)
  • ...
  • insertItem(itemn)

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

我的想法

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

最佳答案

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

dependencies

An array of the operation objects that must finish executing before the current object can begin executing.

对于您的示例,这意味着 insertItem 操作依赖于 createContainer 操作。

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

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

查看 API Reference for NSOperation了解更多信息。 还有一个不错的NSHipster article on NSOperations .

关于ios - 确保在发送其他请求之前完成初始网络请求的最佳方法(iOS 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42314635/

相关文章:

ios - 在 iOS 应用程序中管理订阅的链接最终会出现空白屏幕

jakarta-ee - 与 Apache Tomcat 的容器间通信

ios - 如何为 iphone 应用程序设置代码框架

ios - 以编程方式获取 WKInterfaceGroup 的背景颜色 (WatchKit)

ios - 如何让标题滚动到 iOS TextView 上方

ios - 从图库中选取图像后显示 View Controller

ios - 推送通知未送达

ios - Swift 编写一个带有返回值的 async/await 方法

c# - 如何强制 Windows 重新连接到网络驱动器

networking - golang中获取SSID/其他网络信息