Lorsque mon application est fermée, la classe du contrôleur principal se retire en tant qu'Observateur du modèle, puis libère le modèle. Comme ceci:KVO indique qu'un observateur KVO est enregistré même si ce n'est pas le cas (ou est-ce?)
- (void)dealloc {
[theModel removeObserver:self
forKeyPath:@"myValue"];
[theModel release];
[super dealloc];
}
Et juste après, le débogueur dit:
2010-04-29 14: 07: 40,294 MyProgram [13678: a0f] Une instance 0x116f2e880 de classe TheModel a été libérée alors que les observateurs de la valeur-clé étaient encore enregistrés avec elle. L'information d'observation a été divulguée, et peut même devenir attachée par erreur à un autre objet. Définissez un point d'arrêt sur NSKVODeallocateBreak pour arrêter ici dans le débogueur. Voici les informations en cours d'observation:
< NSKeyValueObservationInfo 0x100288450 > (
< NSKeyValueObservance 0x1002aca90: Observateur: 0x116f40ec0, chemin clé: maValeur, Options: < Nouveau: OUI, Old: Prior: NO > Contexte: 0x0, propriété: 0x116f80430 >
)
où 0x116f2e880
est effectivement le modèle et 0x116f40ec0
est effectivement le contrôleur.
Comment le contrôleur peut-il encore être un observateur lorsqu'il vient de se retirer en tant qu'observateur?
GDB ne dit pas cela; c'est la sortie de la console de votre programme. La sortie GDB ne comportera pas l'horodatage, le nom du programme, le PID et l'ID du thread. Le résultat provient de KVO lui-même, dans votre processus. J'ai corrigé le titre de la question en conséquence. –