En el desarrollo de la plataforma Apple, ¿hay alguna distinción entre un controlador de finalización y una devolución de llamada?

Realmente no. Normalmente, el término “devolución de llamada” se utiliza para una función C simple, mientras que un “controlador de finalización” es el término utilizado para los métodos Objective-C utilizados como devolución de llamada. Pero su principio subyacente es muy similar.

Lo único que es diferente de cualquiera de estos es un bloque utilizado como un controlador de finalización, hacia el cual se están moviendo más APIs ahora. Un bloque es mejor porque puede capturar información adicional sobre su entorno automáticamente, como referencias de objetos y variables que afecta. Un controlador de finalización clásico o devolución de llamada debe organizarse para descubrir qué objeto u otras cosas llamar por adelantado, y debe lidiar con eso en su propio código. Por ejemplo, una devolución de llamada en C podría tener un parámetro anónimo (nulo *) que puede usar para pasar una referencia de objeto, o un controlador de finalización Obj-C podría tener un ‘objetivo’ y un selector para llamar (también, Objective-C / Cocoa tiene NSInvocation, que envuelve un método de objeto ‘callback’ en un objeto: es un intento temprano de hacer algo como un bloque, pero solo puede capturar los parámetros de la función original y el objeto de destino, no variables de entorno adicionales. Se usa para Deshacer , entre otras cosas).