ios - Bolts 框架任务队列
<p><p>我正在开发一个 iOS 应用程序,并且一直在研究使用 Parse (facebook) 的 Bolts 框架来管理网络操作(使用 Alamofire 进行网络请求)。 </p>
<p>我想知道对于 Bolts 的任务队列是否有一个好的实现/模式。我需要有离线功能,因此我(认为)需要有某种任务队列,所以如果用户离线,他们所有的保存/创建操作都会被保存(排队和持久化),然后在他们有网络连接后执行,重试请求也需要。我查看了 NSOperation 队列,所以我可能会走那条路,尽管我喜欢 Bolts 如何使用 BFTask 做事并且更愿意使用它。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我理解你的问题,但我认为你混淆了 NSOperation queue 和 BFTasks 的目的。</p>
<p>BFTasks 用于以一种内聚和简约的方式使用和创建异步和同步方法/网络请求。例如,假设必须登录用户,显示搜索 View ,然后下载用户的搜索查询结果。</p>
<p>为了使您的应用程序保持优化并使 UI 达到 60fps,您需要异步运行网络请求。显然,只有当用户登录(使用您的方法)(这种技术称为“串行异步任务”)时,您才会显示搜索 View ,然后您将使用并行异步请求下载搜索结果(考虑下载电影作品的电影名称在 iTunes 中查询。它们同时开始下载,彼此“并行”,因此用户图像彼此独立下载)。 (而这被称为“并行异步任务”)。</p>
<p>从这个例子可以看出,如果我们使用顺序和并行异步请求,我们只能实现所需的逻辑和所需的性能。
Bolts 框架允许您以一种非常有凝聚力和方便的方式实现上述所有逻辑。</p>
<p>另一方面,NSOperation 队列允许您构建同步和异步方法的复杂序列。它甚至允许您获取特定操作的状态并绑定(bind)依赖项。一个很好的例子就是 ViewController 生命周期。</p>
<p>如果我是你,我会先学习如何分开使用 Bolts 和 NSOperation 队列。然后,根据您在应用程序中实际需要在功能方面实现的目标,我会开始考虑在类或结构中绑定(bind) Bolts 和 NSOperation 队列(以防您使用 swift)。就像将 Bolts 用于“在线”内容(执行网络请求)和 NSOperation 队列用于“离线”(存储用户在离线时执行的操作序列,以便在互联网连接恢复时执行此序列)。</p >
<p>你可以阅读更多关于 NSOperation <a href="https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSOperation_class/index.html#//apple_ref/occ/cl/NSOperation" rel="noreferrer noopener nofollow">here</a>以及关于 iOS 的 Bolts <a href="https://github.com/BoltsFramework/Bolts-iOS" rel="noreferrer noopener nofollow">here</a> .</p>
<p><strong>更新:</strong></p>
<p>就实现模式而言,您可能要考虑的一个建议是创建一个简单的类/结构,该类/结构将负责存储(“堆叠”)您的 Bolts 方法。您可以将数组用于顺序逻辑,将集合用于并行逻辑。您还可以使用集合轻松确保某些请求仅发生一次,因为集合仅存储唯一对象。老实说,在我看来,您应该尝试实现类似于我所描述的内容,因为 Bolts 本身(几乎可以肯定)包含 NSOperation 和 NSOperaitionQueue。</p>
<p>顺便说一句,自从 <a href="http://blog.parse.com/announcements/open-sourcing-our-sdks/" rel="noreferrer noopener nofollow">Parse iOS SDK is open source right now</a> ,您可以看到他们如何实现 <code>saveEvenutually</code> 方法,该方法在互联网连接恢复时保存对象,并思考如何根据您的需要复制他们的逻辑。</p></p>
<p style="font-size: 20px;">关于ios - Bolts 框架任务队列,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/33271441/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/33271441/
</a>
</p>
页:
[1]