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.