2010-03-25 68 views
16

有没有人在Objective-C中实现了Futures?我(希望不是天真地)认为将NSInvocations包装在一个不错的API中应该是相当简单的?Objective-C的期货?

+0

http:// mobisoftinfotech。com // tutorials/essential-swift/essential-swift-for-objective-c-programmers.html – 2016-01-25 08:49:06

回答

3

MPWFoundation了基于Higher Order Messaging期货:

假设你有一个消息computeResult定期计算:

result = [someObject computeResult]; 

前缀来future消息消息会计算在后台结果:

result = [[someObject future] computeResult]; 

result中的对象是一个代理,它将阻止消息发送给它直到接收到该值。

7

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

这三个之间的一些注意事项:

  • PromiseKit有斯威夫特支持
  • 每个人都可以通过的CocoaPods安装。
  • 每个自动将双重未来值变为单独未来值。
  • 每个都是线程安全的。
  • RXPromise和PromiseKit的行为类似于JavaScript中的Promises/A +。
  • 他们在如何控制期货方面有所不同。在未来的崩溃期中,有一个FutureSource,它有一个未来,而不是未来。在RXPromise和PromiseKit中,未来是它自己的来源。
  • 它们在取消未来的方式上有所不同。在RXPromise消费者呼吁cancel未来本身。在崩溃的期货中,生产商cancels a token给出了创造未来的方法。我不知道PromiseKit做了什么。
  • 对于每种方法都有出色的文档。

因为我写了它,所以很明显地喜欢它所做的设计决定,所以我偏向于崩溃的期货。我认为保持控制独立非常重要,因为它有助于防止自我维持的参考周期(在JS中不是问题,但在处理块时肯定是Obj-C中的问题)。我也认为取消令牌可以简化事情。另一方面,像一个着名语言的知名规范那样行事将会非常好。

+1

_Cancellation_是Future实现的一个非常重要的特性,即使“Promises/A + Spec”没有在其核心API中提示它。 “崩溃的期货”有一个设计良好的完成取消的方法,以及RXPromise,它不仅仅是“明确的”:先发送“取消”给承诺,即发件人放弃对未来的兴趣。如果这是根本的承诺,那么潜在的任务*可以*通过简单地注册处理程序然后取消自己来转发此取消事件。还有意味着当没有更多的消费者时,任务将被取消。 – CouchDeveloper 2014-05-11 05:10:59