Фьючерс на Objective-C? - PullRequest
       13

Фьючерс на Objective-C?

16 голосов
/ 25 марта 2010

Кто-нибудь реализовал Futures в Objective-C? Я (надеюсь, не наивно) предполагаю, что достаточно просто обернуть NSInvocations в хороший API?

Ответы [ 4 ]

15 голосов
/ 25 марта 2010

Майк Эш реализовал фьючерсы с использованием блоков:

8 голосов
/ 14 апреля 2014

PromiseKit кажется довольно популярным. Вот моя библиотека Collapsing Futures . Также есть RXPromise . И многое другое.

Некоторые примечания между этими тремя:

  • PromiseKit имеет поддержку Swift
  • Каждый может быть установлен через CocoaPods.
  • Каждый из них автоматически сводит значения с двойным будущим в значения с однократным будущим.
  • Каждый потокобезопасен.
  • RXPromise и PromiseKit действуют как Promises / A + из JavaScript.
  • Они отличаются тем, как контролируются фьючерсы. В рушащемся фьючерсе есть FutureSource, у которого есть будущее, а не будущее. В RXPromise и PromiseKit будущее - это собственный источник.
  • Они отличаются тем, как отменяется будущее. В RXPromise потребитель звонит cancel о самом будущем. В коллапсирующих фьючерсах производитель отменяет токен , который он дал методу, который создал будущее. Я не знаю, что делает PromiseKit.
  • Все они имеют отличную документацию по каждому методу.

Я склонен к разрушению фьючерсов, так как я написал это и так явно предпочитаю принятые дизайнерские решения. Я думаю, что держать контроль отдельно очень важно, потому что это помогает предотвратить самоподдерживающиеся эталонные циклы (не проблема в JS, но определенно проблема в Obj-C при работе с блоками). Я также думаю, что токены отмены просто делают вещи проще. С другой стороны, было бы неплохо вести себя как хорошо известная спецификация на известном языке.

3 голосов
/ 22 января 2013

MPWFoundation имеет фьючерсы на основе Сообщения высшего порядка :

Предполагается, что у вас есть регулярные вычисления с сообщением computeResult:

result = [someObject computeResult];

добавление префикса к сообщению future приведет к вычислению результата в фоновом режиме:

result = [[someObject future] computeResult];

Объект в result - это прокси, который будет блокироваться при отправке ему сообщений до получения значения.

1 голос
/ 25 марта 2010

Документация Apple по блокам в Grand Central Dispatch может представлять интерес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...