J’en ai parlé dans mon dernier billet, le terme @protocol défini le contrat que devra remplir une classe qui décide de le suivre. L’équivalent en C++ est une interface.

Le code

MyInterface.h (C++)

class InterfaceMyClass{public:virtual ~MyInterface() {}virtual void myBehavior() = 0;};

versus

MyClassProtocol.h (Objective-C)

@protocol MyClassProtocol@required- (void) myBehavior;  @optional- (void) optionalBehavior;  @end

On peut voir que nous pouvons préciser si les méthodes doivent être obligatoirement implémentée ou non grâce aux annotations @required et @optional.

Utiliser un protocole

Pour hériter d’un protocol il suffit de le préciser dans sa déclaration:

C++

#import "InterfaceMyClass.h"class MyClass : InterfaceMyClass{// ...}

versus

Objective-C

#import "MyClassProtocol.h"@interface MyClass : NSObject <MyClassProtocol>// ...@end

Il n’y a pas grand chose a dire de plus sur les protocols, si ce n’est que contrairement à l’héritage, vous pouvez choisir d’en respecter plusieurs en même temps.