Estoy estudiando algunos conceptos básicos sobre protocolos informales y protocolos reales. Lo que me confunde es que Cocoa parece usar muchos protocolos informales en NSObject. Esos protocolos informales son categorías en NSObject que declaran métodos, pero en realidad no los implementan.¿Cuál es la diferencia entre usar un protocolo informal en NSObject o un protocolo con métodos opcionales?
En la medida en que entiendo bien, la única razón por la que hacen uso de protocolos informales (en otras palabras, categorías en NSObject que no proporcionan implementaciones de métodos), es dar una sugerencia de autocompletado en Xcode.
Un ejemplo es el método -awakeFromNib definido en NSNibLoading.h, que es un protocolo informal en NSObject. El sistema de carga de nib comprueba en tiempo de ejecución si un objeto implementa ese método. Si lo hace, entonces lo llama.
Pero ahora imaginemos que no había una función llamada protocolo informal. La alternativa que tendría exactamente el mismo efecto habría sido una declaración @protocol real que declara un método opcional -awakeFromNib. NSObject simplemente adoptaría ese protocolo y el compilador proporcionaría felizmente el autocompletado.
¿Alguien puede señalar la gran diferencia entre estas dos estrategias? No veo el sentido de los protocolos informales, pero realmente me gustaría hacerlo.
Ya veo. Los protocolos informales provienen del pasado donde no había métodos de protocolo opcionales. Ahora esto tiene sentido. –
Actualicé mi respuesta para indicar también claramente que los protocolos informales son producto de un legado. – PeyloW