2010-06-21 28 views

Respuesta

56

De Official Documentation

protocolos formales e informales

Existen dos variedades de protocolo, formal e informal:

  • Un informal protocolo es una categoría en NSObject, que implícitamente hace que casi todos los objetos adoptadores de el protocolo. (Una categoría es una característica de lenguaje que le permite agregar métodos a una clase sin subclases). La implementación de los métodos en un protocolo informal es opcional. Antes de invocar un método, el objeto llamante comprueba para ver si el objeto de destino implementa . Hasta que se introdujeran los métodos de protocolo opcionales en Objective-C 2.0, , los protocolos informales fueron esenciales para la forma en que se implementaron las clases Foundation y AppKit .

  • Un formales protocolo declara una lista de métodos que se espera que las clases cliente de implementar. Los protocolos formales tienen su propia declaración, adopción y sintaxis de comprobación de tipos. Puede designar métodos cuya implementación sea o sea opcional con las palabras clave @required y @optional . Las subclases heredan los protocolos formales adoptados por sus antepasados. Un protocolo formal también puede adoptar otros protocolos .

protocolos formales son una extensión de el lenguaje Objective-C.

+1

por lo que "protocolo informal" es solo otro nombre para la categoría? – Stas

+6

documentaciones de Apple son terribles en comparación con google. –

+3

@JohnDoe vey muy de acuerdo, los documentos de apple son asesinos. –

2

El lenguaje Objective-C proporciona una forma de declarar formalmente una lista de métodos (incluidas las propiedades declaradas) como protocolo. Los protocolos formales son compatibles con el idioma y el sistema de tiempo de ejecución. Por ejemplo, el compilador puede verificar los tipos basados ​​en protocolos, y los objetos pueden introspectivamente en el tiempo de ejecución para informar si o no se ajustan a un protocolo.

11

Protocolo informal: Category (implementaciones son opcionales)

protocolo formal: Extension (implementaciones son opcionales y requeridos)

+0

¿Las implementaciones de métodos de categoría son opcionales? No lo creo, porque comenté una implementación de método e inmediatamente puedo ver el error "Falta la definición del método para 'xxxmethod'". El xxxmethod se declara en el archivo .h. – selva

+1

La forma más simple de describir la diferencia. – Warewolf

Cuestiones relacionadas