2010-03-25 16 views
16

¿Alguien ha implementado Futures en Objective-C? Yo (con suerte no ingenuamente) supongo que debería ser razonablemente simple para envolver NSInvocations en una buena API?¿Futuros para Objective-C?

+0

http: // mobisoftinfotech.com // tutoriales/essential-swift/essential-swift-for-objective-c-programmers.html –

Respuesta

3

MPWFoundation ha futuros basado en Higher Order Messaging:

Asumiendo que tiene un cálculo regular con un mensaje computeResult:

result = [someObject computeResult]; 

anteponiendo ese mensaje con el mensaje future calculará el resultado en el fondo:

result = [[someObject future] computeResult]; 

El objeto en result es un proxy que se bloqueará cuando se le envíen mensajes hasta que se reciba el valor.

7

PromiseKit parece bastante popular. Está mi biblioteca Collapsing Futures. También hay RXPromise. Y mucho más.

Algunas notas entre los tres:

  • PromiseKit tiene soporte Swift
  • Cada puede instalarse por CocoaPods.
  • Cada uno aplana automáticamente los valores doblemente futuros en valores individuales futuros.
  • Cada uno es seguro para subprocesos.
  • RXPromise y PromiseKit actúan como Promises/A + de JavaScript.
  • Difieren en cómo se controlan los futuros. En el colapso de futuros hay un FutureSource, que tiene un futuro en lugar de un futuro. En RXPromise y PromiseKit, un futuro es su propia fuente.
  • Difieren en cómo se cancelan los futuros. En RXPromise, el consumidor llama al cancel en el futuro. En el colapso de futuros, el productor cancels a token dio el método que hizo el futuro. No sé lo que hace PromiseKit.
  • Todos tienen una excelente documentación sobre cada método.

Soy tendencioso hacia el colapso de futuros, ya que lo escribí y así que claramente prefiero las decisiones de diseño que tomó. Creo que mantener el control por separado es muy importante porque ayuda a prevenir ciclos de referencia autosostenibles (no es un problema en JS, pero definitivamente es un problema en Obj-C cuando se trabaja con bloques). También creo que cancelar tokens simplemente facilita las cosas. Por otro lado, actuar como una especificación bien conocida de un lenguaje conocido sería realmente agradable.

+1

_Cancellation_ es una característica sumamente importante de una implementación futura, aunque la "especificación Promises/A +" no lo sugiere en su API principal. "Collapsing Futures" tiene un medio bien diseñado para lograr la cancelación, así como RXPromise, simplemente no es tan "explícito": el envío de 'cancelar' a una promesa primero significa que el remitente abandona su interés en el futuro. Si esta es la promesa original, la tarea subyacente * puede * reenviar este evento de cancelación simplemente registrando un controlador y luego cancelarlo. También significa que una tarea se cancelará cuando ya no haya más consumidores. – CouchDeveloper

Cuestiones relacionadas