Подтвердить что ты не робот

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

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

4b9b3361

Ответ 2

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

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

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

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

Ответ 3

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

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

result = [someObject computeResult];

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

result = [[someObject future] computeResult];

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