La Notification en Objective-C a été conçue dans l'esprit des Design Patterns ("patron de fabrication").
Nous parlons d'ailleurs en Objective-C du pattern <Notification>.
Le principal avantage des patterns est de minimiser le "couplage" ou liens entre les objets manipulés.
Ce qui permet d'obtenir un modèle objets / données plus allégé et de faciliter le travail des développeurs.
Revenons à notre pattern <Notification>.
Un objet peut ainsi diffuser des informations à d'autres objets sans tout connaître de ceux-ci.
Les objets qui souhaitent recevoir les informations "s'abonnent" (Les Obversateurs).
Son objectif est de distribuer les notifications.
Comment déclarer le Notification Manager ?
Prenons la classe MaClasse.m :
- (void) awakeFromNib {
...
...
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
}
- (void) awakeFromNib {
...
[nc addObserver:self selector:@selector(windowWillClose:) name:NSWindowWillCloseNotification object:self.window];
}
- (void) windowWillClose: (NSNotification *)notification {
...
}
Dans cet exemple nous nous "abonnons" à l'événement <NSWindowWillCloseNotification> (événement système qui est généré lors de la fermeture d'une fenêtre).
Nous pouvons aussi nous "abonner" à une notification applicative.
static NSString * const Notification1 = @"MaNotification";
- (void) awakeFromNib {
...
[nc addObserver:self selector:@selector(ma_fonction:) name:Notification1 object: nil];
...
[nc addObserver:self selector:@selector(ma_fonction:) name:Notification1 object: nil];
}
- (void) ma_fonction: (NSNotification *)notification {
...
}
Dans cet exemple nous nous "abonnons" à la notification <Notification1> - notification définie par l'application.
A noter que dans la méthode <ma_fonction>, nous pouvons gérer les informations propres à la notification (paramètre <notification>).
Exemple de la gestion des informations d'une notification :
- (void) ma_fonction : (NSNotification *) information
{
NSString *valeur = [[information userInfo] objectForKey: @"cle1"];
{
NSString *valeur = [[information userInfo] objectForKey: @"cle1"];
...
}
Dans cet exemple, nous récupérons la valeur de la clé "cle1".
Les informations sont gérées sous forme de "dictionnaire" (clé / valeur).
Comment "publier" ou poster une notification ?
Prenons la classe MaClasse2.m.
static NSString * const Notification1 = @"MaNotification";
- (void) awakeFromNib {
...
...
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
}
- (void) ma_fonction {
NSMutableArray *key = [[NSMutableArray alloc] init];
[key addObject: @"cle1"];
[key addObject: @"cle2"];
NSMutableArray *value = [[NSMutableArray alloc] init];
[value addObject: @"valeur1"];
[value addObject: @"valeur2"];
[key addObject: @"cle2"];
[value addObject: @"valeur2"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects: value forKeys: key];
[key release];
key = nil;
[value release];
value = nil;
[nc postNotificationName: Notification1 object:self userInfo: dict];
key = nil;
value = nil;
}
Nous "publions" une notification avec un dictionnaire des données composé de 2 couples clé / valeur.
La gestion des notifications sous Objective-C est puissante mais trop de notifications peuvent nuire à la lisibilité de votre application.
La création d'une notification doit donc se réfléchir.
Ma notification sera t-elle utilisée amplement par les objets de mon application ?
Aucun commentaire:
Enregistrer un commentaire