Pour mieux comprendre ce qui se passe "sous le capot", j'aimerais faire une trace complète de toutes les notifications qui se produisent dans mon application.
Naïf comme je suis, la première chose que j'ai essayée était de m'enregistrer comme ça :
Quelque part dans mon application :
{
[...]
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(traceNotifications:) name:nil object:nil];
[...]
}
- (void)traceNotifications:(NSNotification *)notification
{
NSLog(@"received notification %@", [notification name]);
}
Je reçois effectivement un certain nombre de notifications de cette façon. Mais à un moment donné, l'application se plante. La trace de la pile montre qu'elle se plante avec EXC_BAD_ACCESS dans realizeClass, ce qui, d'après mon expérience, indique que quelque chose est appelé après sa désallocation. Mon objet d'observation est cependant toujours vivant, son deallocator n'a pas été appelé (encore).
La chose suivante que j'ai essayée était de mettre un point d'arrêt vers -[NSNotificationCenter postNotification:]
et ensuite exécuter po {NSNotification *}($ebp+16)
dans la console gdb chaque fois que mon point d'arrêt est piégé. Cela a révélé quelques notifications, mais pas toutes celles que j'attendais/ espérais. Par exemple, mon application gère correctement les changements d'orientation mais je ne vois pas de notifications piégées lors de la réorientation du dispositif (dans le simulateur).
Qu'est-ce que je rate ? Existe-t-il un moyen (par exemple un outil) pour observer de manière fiable un NSNotificationCenter ?
Merci pour tout conseil.