2010-12-07 8 views
9

La respuesta simple sería Protocolo.¿Cuál es el equivalente de una función pura virtual de C++ en Objective-C?

El otro punto es que se dice que todos los métodos en ObjectC son virtuales, por lo que no es necesario decir virtual en ObjC.

Me resulta difícil entender este concepto.

¿Algún comentario para aclarar más esta pregunta?

Gracias por comentar.

+0

http://stackoverflow.com/questions/5222083/implement-a-pure-virtual-method-in-objective-c –

Respuesta

13

respuesta simple sería Protocolo.

Simple but wrong. Un protocolo es una especificación de interfaz. Es una colección de mensajes que un objeto debe (ignorando la palabra clave @optional por el momento) responder a.

El término "función virtual" no tiene contraparte directa en Objective-C. En Objective-C no llama funciones a objetos, le envía mensajes. El objeto en sí mismo luego decide cómo responder al mensaje, generalmente al buscar el mensaje en su objeto de clase, encontrar el método asociado e invocarlo. Tenga en cuenta que todo esto sucede en tiempo de ejecución, no en tiempo de compilación.

El mapeo entre los mensajes (o "selectores" para darles su término técnico) y los métodos se basa completamente en el @implementation. Las declaraciones de métodos en el @interface están solo ahí para darle al compilador la información que necesita para advertirle que puede haber olvidado la implementación de un método. Y es solo una advertencia porque no se puede decir hasta el momento de la ejecución si el objeto realmente responde al mensaje o no. Por ejemplo, alguien más podría agregar una categoría a una clase existente que proporciona implementaciones para los métodos que faltan, o una clase podría anular forwardingTargetForSelector: para reenviar mensajes a los que no responde en otro lugar.

+0

+1 Lo suficientemente cerca. Aunque puede ver los métodos en objetos C++ como enviar un mensaje a ese objeto, solo el enlace del mensaje se realiza en tiempo de compilación en lugar de en tiempo de ejecución. –

+1

@Martin York: Gracias por la votación. Sí, puede considerar una función en un objeto C++ como enviar un mensaje, pero no es realmente cierto y no es tan útil hacerlo, mientras que es cierto en Objective-C y es útil hacerlo. – JeremyP

+1

Creo que los creadores de OO no estarían de acuerdo con usted allí. Ese es exactamente el concepto de un método (Un mensaje para el objeto). La diferencia importante entre C++ y Obj-C es solo la vinculación de la llamada al método real. C++ se realiza en tiempo de compilación Obj-C se realiza en tiempo de ejecución (esa es la única diferencia). Un buen resumen de las referencias relacionadas con OO-P se puede encontrar aquí. http://en.wikipedia.org/wiki/Object-oriented_programming –

2

Los métodos en objetos en Objective-C no son funciones virtuales, son funciones reales.

Disiento, los métodos en Obj-C no son tan reales como uno esperaría. Se comportan como funciones virtuales en C++ do, excepto que no se puede hacer una función 'pura virtual' en Objective-C.

Saludos, Raxit

Cuestiones relacionadas