2010-10-20 12 views
8

He leído la documentación pero todavía estoy confundido. ¿Alguien puede explicar qué es un protocolo? (Podría dar ejemplos de código, pero realmente estoy buscando una explicación)¿Qué es un protocolo?

Respuesta

11

Here's a great article on it. Efectivamente, un protocolo en Objective-C es muy similar a una interfaz en Java o una clase virtual pura en C++ (aunque no exactamente como clases virtuales puras pueden tener miembros de datos ...). Básicamente es una garantía de que una clase específica sabe cómo responder a un determinado conjunto de métodos (mensajes).

Editar El artículo original desapareció, así que lo he reemplazado con un tutorial diferente.

+3

Es una garantía a menos que el protocolo defina métodos opcionales. En ese caso, aún debe verificar si el método se implementó o no. El protocolo –

+0

también puede tener propiedades. –

+0

Solo quiero señalar a los moderadores que el enlace está muerto. – Alix

4

Un protocolo es un medio para definir una lista de métodos obligatorios y/o opcionales que implementa una clase. Si una clase adopta un protocolo, debe implementar todos los métodos requeridos en los protocolos que adopta. Cocoa utiliza protocolos para admitir la comunicación entre procesos a través de mensajes de Objective-C. Además, dado que Objective-C no es compatible con la herencia múltiple, puede lograr una funcionalidad similar con los protocolos, ya que una clase puede adoptar más de un protocolo.

Un buen ejemplo de protocolo es NSCoding, que tiene dos métodos requeridos que una clase debe implementar. Este protocolo se utiliza para permitir que las clases se codifiquen y decodifiquen, es decir, que se archiven los objetos escribiendo en el almacenamiento permanente.

@protocol NSCoding 

    -(void)encodeWithCoder:(NSCoder *)aCoder; 

    -(id)initWithCoder:(NSCoder *)aDecoder; 

    @end 

adoptar un protocolo, escriba el nombre del protocolo en <> como a continuación

@interface SomeClass : NSObject <NSCoding> 

    { 
    some variables 
    } 

Cómo definir un protocolo?

Podemos crear ambos métodos obligatorios y opcionales dentro de un protocolo. Lo que sigue es un definion de un protocolo llamado 'Hola':

@protocol Hello 
    - (BOOL)send:(id)data; 
    - (id)received; 
    @optional 
    - (int)progress; 
    @end 

para utilizar el protocolo, al igual que con el ejemplo anterior, se declaran el protocolo en la interfaz y escribir los métodos requeridos en la implementación de la clase:

// Interfaz @interface AnotherClass: NSObject

{ 
    some declaration 
    } 

// Implementación @implementation AnotherClass

- (BOOL)send:(id)data 
    { 
    some declaration 
    } 

    - (id)received 
    { 
    some code 
    } 

// Método opcional

- (int)progress 
    { 
    some code 
    } 
    @end 

espero que le ayuda a aprender Protocolo.

Cuestiones relacionadas