2

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

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

4

1 回答 1

2

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

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

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

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

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

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

你可以在这里阅读更多关于 NSOperation和 iOS 的 Bolts 的信息

更新:

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

顺便说一句,由于Parse iOS SDK 现在是开源的,您可以看到他们如何实现saveEvenutually在互联网连接恢复时保存对象的方法,并思考如何根据您的需要复制他们的逻辑。

于 2015-10-22T01:05:23.667 回答