Magazine High tech

Développement d’application iPhone : des delegates et des protocoles.

Publié le 27 juillet 2010 par Chadiak

Développement d’application iPhone : des delegates et des protocoles.

Cet article traite des notions de delegate et de protocole qu’on retrouve partout dans la SDK et qui se trouvent au fondement du développement pour iPhone.

L’article ne présuppose que peu de notions d’objective-C ou même de développement objet. Un développeur connaissant le C devrait donc pouvoir le lire et en faire le meilleur usage. Pour acquérir le minimum de notions objet/objective C, vous pouvez vous référer à notre article …
Bonne lecture !

La SDK pour iPhone définit la notion de delegate (délégué) et de protocole qui vont de pair.

Qu’est-ce qu’un delegate d’objet ? c’est une sorte de « bras droit » de complément de cet objet.

prenons l’exemple concret de l’objet UIWebView (vue web). Cet objet, rend des services standards (du genre charger la page html se trouvant à une URL précise).

Mais une fois le chargement fini, on peut vouloir prendre certaines actions (par exemple on peut décider d’afficher une popup), et cette action doit être personnalisée par le développeur.

C’est là que le delegate rentre en jeu : Quand la UIWebView a fini de charger la page, elle appelle sur un objet qu’elle désigne comme son delegate (on verra comment plus loin) une méthode (par exemple DidFinishLoading) ; à partir de cet instant c’est le delegate et sa méthode appelée qui prennent le relai (le bras droit entre en action:).

Tout ce qu’on exige donc du delegate : savoir répondre à un nombre de méthodes qui vont être appelées par UIWebView … Cet ensemble de méthodes est un protocole !

Voilà comment on implémente concrètement cette notion de delegate :

NomDeLaClasse.h est le fichier header de la classe délégante ou appelante. Le protocole auquel doivent savoir répondre les delegates de la classe est souvent défini avec la classe :

nomDeLaClasse.h :

@protocole nomDeLaClasseDelegate
- (id) nomDeLaMethode : (typeDuParamètre) paramètre;
@end

@interface nomDeLaClasse : classeParente
{
(id) <nomDeLaClasseDelegate> Delegate;
}

@property (nonatomic, retain) id Delegate;

@end

Développement d’application iPhone : des delegates et des protocoles.

id est un pointeur générique, on peut remarquer également que le protocole est placé entre <> devant le nom du Delegate.
Dans le .m on retrouvera le @synthesize Delegate; qui générera les accesseurs.

A présent il faut créer la classe qui nous servira de Delegate, à laquelle on rajoutera les méthodes et variables que l’on souhaite :

maDelegate.h :

@interface maDelegate : classeParente <nomDuProtocole> {

}
-(id) nomDeLaMethode : (typeDuParamètre) paramètre;
@end

Développement d’application iPhone : des delegates et des protocoles.

maDelegate.m :

@implementation maDelegate
-(id) nomDeLaMethode : (typeDuParamètre) paramètre {

}
@end

Développement d’application iPhone : des delegates et des protocoles.

Il ne reste plus qu’a attribuer un objet maDelegate sur le pointeur nomDeLaClasseDelegate.
Par exemple si l’on se situe dans un troisième objet on peut implémenter la méthode suivante :

- (void) initMaDelegate {

maDelegate *delegate;
nomDeLaClasse *maClasse;

maClasse = [[nomDeLaClasse alloc] init];
delegate = [[maDelegate alloc] init];

maClasse.Delegate = delegate;
}


Retour à La Une de Logo Paperblog

A propos de l’auteur


Chadiak Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog

Magazines