我正在开发一个iOS应用程序,并一直在研究使用Parse(facebook)的Bolts框架来管理网络操作(使用Alamofire进行网络请求)。
我想知道Bolts的任务队列是否有一个好的实现/模式。我需要具有离线功能,因此我(想)需要有某种任务队列,所以如果用户离线,他们的所有保存/创建操作都会被保存(排队和保持),然后在他们有网络连接后执行,还需要重试请求。我已经查看了NSOperation队列,所以我可能会走这条路线,虽然我喜欢Bolts如何使用BFTask进行操作并且更愿意使用它。
答案 0 :(得分:2)
我理解你的问题,但我认为你把NSOperation队列和BFT的目的混淆了一点。
BFTasks用于以连贯和简约的方式使用和创建异步和同步方法/网络请求。例如,假设必须登录用户,提供搜索视图,然后下载用户的搜索查询结果。
为了保持您的应用程序优化并使用60fps的UI,您需要异步运行网络请求。显然,只有当用户登录时才会显示搜索视图(使用您的方法)(此技术被称为"系列中的异步任务")然后您将使用并行异步请求下载搜索结果(想想下载电影)在iTunes中查看电影名称查询的艺术作品。它们同时开始下载,并且相互并行地相互下载,因此用户图像彼此独立下载。 (这是一个被称为"并行异步任务")。
从这个例子中可以看出,如果我们使用顺序和并行异步请求,我们只能实现所需的逻辑以及所需的性能。 Bolts框架允许您以非常有凝聚力和方便的方式实现所有上述逻辑。
另一方面,NSOperation队列允许您构建同步和异步方法的复杂序列。它甚至允许您获取特定操作的状态并绑定依赖项。一个很好的例子就是视图控制器生命周期。如果我是你,我将首先学习如何使用螺栓和NSOperation队列彼此分开。然后,根据您在应用程序中实际需要实现的功能,我将开始考虑在类或结构中绑定Bolts和NSOperation队列(如果您使用swift)。就像使用螺栓在线"在线"东西(执行网络请求)和NSOperation队列"离线" (存储用户在离线时所做的一系列动作,以便在互联网连接恢复时执行此序列。)
您可以阅读有关NSOperation here和关于iOS here的螺栓的更多信息。
<强>更新强>
在实现模式方面,您可能要考虑的一个建议是创建一个简单的类/结构,负责存储(&#34;堆叠&#34;)您的Bolts方法。您可以将数组用于顺序逻辑,将集合用于并行逻辑。您还可以使用集合轻松确保某些请求仅发生一次,因为集合仅存储唯一对象。老实说,在我看来,你应该尝试实现类似于我所描述的东西,因为螺栓本身(几乎可以肯定)包含了NSOperation和NSOperaitionQueue。
顺便说一下,从Parse iOS SDK is open source right now开始,您可以看到他们如何实现saveEvenutually
方法,该方法可以在互联网连接恢复时保存对象,并考虑如何根据需要复制逻辑。