如何在iOS中按顺序干净地封装和执行一系列后台任务?

时间:2013-04-26 00:09:32

标签: ios objective-c macos asynchronous promise

我的应用程序包含一个后端服务器,其中包含许多必须在后台执行的事务。其中许多事务需要运行许多同步代码。

例如,执行查询,使用结果执行另一个查询,创建新的后端对象,然后将对新对象的引用返回到前台中的视图控制器对象,以便可以更新UI。

更具体的情况是按顺序执行一系列AJAX调用,类似于this question,但在iOS中。

这一系列任务实际上是一项统一的工作。我没有在iOS中找到允许我将此序列干净地编码为“工作单元”的现有工具。同样地,我没有看到为异步任务序列中可用的“工作单元”提供一致上下文的方法。

2 个答案:

答案 0 :(得分:2)

我最近不得不做一些JavaScript,并且必须学会使用JS中常见的Promise概念。我意识到我可以将这个想法改编为iOS和Objective-C。结果是Github上的here。有文档,代码和单元测试。

Promise应该被认为是将来将结果对象(id)或错误对象(NSError)返回到块的承诺。创建Promise对象以表示异步结果。异步代码将结果传递给Promise,然后传递Promise计划并运行一个块来处理结果或错误。

如果您熟悉JS上的Promises,您将立即识别iOS版本。如果没有,请查看自述文件和参考文献。

答案 1 :(得分:2)

我已经使用了大多数常见的嫌疑人,我不得不说,对我来说,Grand Central Dispatch是要走的路。

Apple显然非常关心它重写大量的库代码以使用完成块。

IIRC,Apple也表示GCD是多任务处理的首选实现。

我还记得以前的一些选项已经使用GCD重新实现了,所以你还没有附加其他东西,Go GCD!

顺便说一句,我曾经发现编写块签名真的很痛苦,但是如果你只是在选择占位符时点击返回,它会为你完成所有这些。什么可能比那更甜。