Objective-C的期货?

时间:2010-03-25 14:30:55

标签: objective-c concurrency

是否有人在Objective-C中实施了Futures?我(希望不是天真地)假设将NSInvocations包装在一个漂亮的API中应该相当简单吗?

4 个答案:

答案 0 :(得分:15)

答案 1 :(得分:8)

PromiseKit 似乎很受欢迎。有我的 Collapsing Futures 库。还有 RXPromise 。还有更多。

这三者之间的一些注释:

  • PromiseKit拥有Swift支持
  • 每个都可以通过CocoaPods安装。
  • 每个人都会自动将双重未来的价值变为单一的未来价值。
  • 每个都是线程安全的。
  • RXPromise和PromiseKit就像JavaScript中的Promises / A +。
  • 他们对未来的控制方式不同。在崩溃的期货中,有一个FutureSource,它有一个未来,而不是一个未来。在RXPromise和PromiseKit中,未来是它自己的来源。
  • 他们在取消未来的方式上有所不同。在RXPromise中,消费者就未来本身调用cancel。在崩溃期货中,生产者cancels a token给了创造未来的方法。我不知道PromiseKit做了什么。
  • 所有方法都有出色的文档。

我偏向于贬低期货,因为我写了它,因此显然更喜欢它所做的设计决策。我认为保持控制分离是非常重要的,因为它有助于防止自我维持的参考周期(在JS中不是问题,但在使用块时绝对是Obj-C中的问题)。我也认为取消令牌只会让事情变得更容易。另一方面,像一个众所周知的语言的知名规范表现得非常好。

答案 2 :(得分:3)

MPWFoundation的期货基于Higher Order Messaging

假设您使用消息computeResult进行定期计算:

result = [someObject computeResult];

使用future消息为该消息添加前缀将在后台计算结果:

result = [[someObject future] computeResult];

result中的对象是一个代理,它会在收到消息之前阻止消息发送给它。

答案 3 :(得分:1)

关于blocks in Grand Central Dispatch的Apple文档可能很有用。