NSNotificationCenter : l’event manager de l’Objective-C

xcodeNSNotificationCenter c’est quoi ? Il s’agit d’un objet permettant de réagir à certains événements (et plus rarement d’en envoyer). Baser toute une application sur de l’Event-driven programming, c’est en général une mauvaise idée. Toutefois, il s’agit d’un mécanisme qui peut s’avérer utile.

Bien que le comportement ressemble à celui d’une delegate, la différence se situe au niveau du nombre d’objets pouvant réagir. Là où une delegate ne permet l’envoie d’un message qu’à un seul objet, le NSNotificationCenter permet à plusieurs objet de répondre à un même événement, et qui plus est avec des méthodes différentes.

Voici comment « abonner » un objet à un événement:

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(onBecomeActive)
name:UIApplicationDidBecomeActiveNotification
object:nil];

Chaque class possède ses propres notifications (name, ici UIApplicationDidBecomeActiveNotification).

Vous pouvez également déclencher vos propres événements:

[[NSNotificationCenter defaultCenter]
postNotificationName:MyEvent object:self];

Pensez à définir les notifications que vous enverrez avec un enum pour préserver la lisibilité du code (le nom de la notification étant de type NSString).

Lors du dealloc d’un objet, il ne faut pas oublier de retirer l’écoute d’une notification:

[[NSNotificationCenter defaultCenter] removeObserver:self]

Il existe énormément de Notification puisque chaque class est susceptible de proposer les siennes (vous pouvez d’ailleurs créer les vôtres). Voici quelque exemple:

  • UIApplicationDidBecomeActiveNotification : lorsque l’utilisateur quitte l’application puis y revient.
  • UIKeyboardDidShowNotification : lorsque le clavier apparaît.
  • UIApplicationWillTerminateNotification : losque l’application va être arrêtée.

Pour plus de détails: voir la documentation d’Apple.

Publié par

gcko

#iOS developer at @applydia, former #Epitech student, «I'm am currently making your smartphone smarter»