2010-03-25 67 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