OStack程序员社区-中国程序员成长平台

标题: ios - Bolts 框架任务队列 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 16:49
标题: ios - Bolts 框架任务队列

我正在开发一个 iOS 应用程序,并且一直在研究使用 Parse (facebook) 的 Bolts 框架来管理网络操作(使用 Alamofire 进行网络请求)。

我想知道对于 Bolts 的任务队列是否有一个好的实现/模式。我需要有离线功能,因此我(认为)需要有某种任务队列,所以如果用户离线,他们所有的保存/创建操作都会被保存(排队和持久化),然后在他们有网络连接后执行,重试请求也需要。我查看了 NSOperation 队列,所以我可能会走那条路,尽管我喜欢 Bolts 如何使用 BFTask 做事并且更愿意使用它。



Best Answer-推荐答案


我理解你的问题,但我认为你混淆了 NSOperation queue 和 BFTasks 的目的。

BFTasks 用于以一种内聚和简约的方式使用和创建异步和同步方法/网络请求。例如,假设必须登录用户,显示搜索 View ,然后下载用户的搜索查询结果。

为了使您的应用程序保持优化并使 UI 达到 60fps,您需要异步运行网络请求。显然,只有当用户登录(使用您的方法)(这种技术称为“串行异步任务”)时,您才会显示搜索 View ,然后您将使用并行异步请求下载搜索结果(考虑下载电影作品的电影名称在 iTunes 中查询。它们同时开始下载,彼此“并行”,因此用户图像彼此独立下载)。 (而这被称为“并行异步任务”)。

从这个例子可以看出,如果我们使用顺序和并行异步请求,我们只能实现所需的逻辑和所需的性能。 Bolts 框架允许您以一种非常有凝聚力和方便的方式实现上述所有逻辑。

另一方面,NSOperation 队列允许您构建同步和异步方法的复杂序列。它甚至允许您获取特定操作的状态并绑定(bind)依赖项。一个很好的例子就是 View Controller 生命周期。

如果我是你,我会先学习如何分开使用 Bolts 和 NSOperation 队列。然后,根据您在应用程序中实际需要在功能方面实现的目标,我会开始考虑在类或结构中绑定(bind) Bolts 和 NSOperation 队列(以防您使用 swift)。就像将 Bolts 用于“在线”内容(执行网络请求)和 NSOperation 队列用于“离线”(存储用户在离线时执行的操作序列,以便在互联网连接恢复时执行此序列)。

你可以阅读更多关于 NSOperation here以及关于 iOS 的 Bolts here .

更新:

就实现模式而言,您可能要考虑的一个建议是创建一个简单的类/结构,该类/结构将负责存储(“堆叠”)您的 Bolts 方法。您可以将数组用于顺序逻辑,将集合用于并行逻辑。您还可以使用集合轻松确保某些请求仅发生一次,因为集合仅存储唯一对象。老实说,在我看来,您应该尝试实现类似于我所描述的内容,因为 Bolts 本身(几乎可以肯定)包含 NSOperation 和 NSOperaitionQueue。

顺便说一句,自从 Parse iOS SDK is open source right now ,您可以看到他们如何实现 saveEvenutually 方法,该方法在互联网连接恢复时保存对象,并思考如何根据您的需要复制他们的逻辑。

关于ios - Bolts 框架任务队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33271441/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4