Objective-C的未来?

Objective-C的未来?,objective-c,concurrency,Objective C,Concurrency,有人在Objective-C中实施过吗?我(希望不是天真地)假设在一个好的API中封装nsInvocation应该相当简单?Mike Ash已经使用块实现了未来: 苹果关于的文档可能会引起人们的兴趣。的未来基于: 假设您有一个带有消息computeResult的常规计算: result = [someObject computeResult]; 在该消息前面加上future消息将在后台计算结果: result = [[someObject future] computeResult];

有人在Objective-C中实施过吗?我(希望不是天真地)假设在一个好的API中封装nsInvocation应该相当简单?

Mike Ash已经使用块实现了未来:

苹果关于的文档可能会引起人们的兴趣。

的未来基于:

假设您有一个带有消息
computeResult
的常规计算:

result = [someObject computeResult];
在该消息前面加上
future
消息将在后台计算结果:

result = [[someObject future] computeResult];
result
中的对象是一个代理,将在向其发送消息时阻止该对象,直到收到值为止

似乎很受欢迎。这是我的图书馆。还有。还有更多

这三者之间的一些注释:

  • PromiseKit得到了迅速的支持
  • 每个都可以通过CoCoapod安装
  • 每一个都会自动将双重未来值展平为单一未来值
  • 每个都是线程安全的
  • RXPromise和PromiseKit的行为类似于JavaScript中的承诺/A+
  • 它们在期货的控制方式上有所不同。在崩溃的期货中有一个未来的来源,它有一个未来,而不是一个未来。在RXPromise和PromiseKit中,未来是它自己的源泉
  • 它们在未来的取消方式上有所不同。在RXPromise中,消费者对未来本身调用
    cancel
    。在期货崩盘中,它所给予的生产者选择了创造未来的方法。我不知道PromiseKit做什么
  • 他们都有关于每种方法的优秀文档

我倾向于崩溃的未来,因为我写了它,所以显然更喜欢它做出的设计决定。我认为保持控件的独立非常重要,因为它有助于防止自我维持的引用循环(在JS中不是问题,但在Obj-C中处理块时肯定是问题)。我还认为取消代币只会让事情变得更简单。另一方面,像来自知名语言的知名规范一样行事真的很好。

取消是未来实现的一个极其重要的功能,尽管“承诺/a+spec”在其核心API中并不建议这样做。“崩溃的期货”有一个精心设计的方法来完成取消,以及RX承诺——它只是没有那么“明确”:首先向承诺发送
取消
,意味着发送方放弃了对未来的利益。如果这是根承诺,则底层任务可以通过简单地注册一个处理程序然后取消自身来转发此取消事件。这也意味着当不再有消费者时,任务将被取消。链接已断开。