我正在开发的应用程序需要在服务器上创建一个容器对象并将项目插入到该容器中。在需要插入第一个项目之前,我不想创建容器对象。但是,创建容器对象需要进行一些初始化,这可能需要一些时间。当该容器仍在初始化时,用户仍然可以发送由于容器尚未准备好而未得到处理的插入请求。我有两个主要问题:
- 这应该在客户端还是服务器端处理?
- 处理此类问题的最佳做法是什么?
本质上,我需要确保在发送任何 insertItem
请求之前完成初始 createContainer
数据任务。
附加信息
通过单击相应的tableViewCell
来发送insertItem
请求。用户单击的第一个 tableViewCell
会发送一个 createContainer
请求,该请求创建一个包含第一项的容器。
对于容纳 n 个元素的容器,应按以下顺序发送请求:
createContainer(Container(with: item1)
插入项目(item2)
- ...
insertItem(item
n)
第一个请求完成后,剩余的 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/