¿Hay un equivalente a [NSOperationQueue currentQueue]
o [NSThread currentThread]
para NSOperation
?¿Cómo obtener la NSOperation actualmente en ejecución?
Tengo un modelo de dominio bastante complejo donde el procesamiento pesado ocurre bastante profundo en la pila de llamadas. Con el fin de cancelar oportunamente una operación, necesitaría pasar el NSOperation
como parámetro para cada método hasta que llegue al punto en el que quiero interrumpir un ciclo de ejecución más largo. Usando hilos podría usar [[NSThread currentThread] isCancelled]
por lo que parece conveniente si hay un equivalente para NSOperation, desafortunadamente solo existe el aparentemente inútil [NSOperationQueue currentQueue]
.
-1 me temo. Nada de esto va a funcionar. La configuración de la propiedad cancelada de una operación no tendrá efecto a menos que la operación compruebe periódicamente la propiedad isCancelled. Ciertamente, KVO no funcionará porque las notificaciones KVO se reciben en el mismo hilo en el que se envían. – JeremyP
Errr ... ¿has leído mi publicación antes de la votación? Observar estas propiedades es * exactamente * cómo se hacen estas cosas. Observa el cambio de estado y luego utiliza -performSelectorOnMainThread ... para hacer cualquier cosa que necesite hacer en el hilo principal. "Nada de esto va a funcionar" es una novedad para mí, ya que tengo varias aplicaciones haciendo exactamente eso. Además, nunca dije que * estableciera * la cancelación. De hecho, específicamente dije que la cola cancela la operación y la operación comprueba este estado periódicamente y deja de funcionar si es verdadero. –
Lo que sucede es: cola cancela ops -> publicaciones op Nota de KVO de isCancelled, maneja deteniéndose a sí mismo -> Observer (algunas de tus controladoras) notas cambian, y si tiene trabajo que hacer, lo hace en el hilo principal. Funciona todo el tiempo. El hecho de que su controlador esté enviado por mensaje en otro hilo no significa que no pueda manejarlo. Si tiene que hacer algo en el hilo principal, avance y envíe algo sobre el hilo principal. –