Кто-нибудь реализовал Фьючерсы в Objective-C? Я (надеюсь, не наивно) полагаю, что должно быть достаточно просто обернуть NSInvocations в хороший API?
Фьючерсы на Objective-C?
Ответ 1
Майк Эш использовал фьючерсы, используя блоки:
Ответ 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
является прокси-сервером, который будет блокироваться при отправке сообщений до получения значения.
Ответ 4
Документация Apple на блоки в Grand Central Dispatch может представлять интерес.