Nous avons eu ce problème étrange. Lorsque nous avons instancié un objet, nous instancions également une propriété qui appartient à cet objet:Lorsqu'un objet est en train d'être instancié, comment un ACCÈS BAD peut se produire lors de l'envoi d'un message NSKeyValueNotifyObserver à un objet désalloué
-(instancetype)init
{
self = [super init];
if (self) {
[self setDocument];
}
return self;
}
-(void)setDocument:
{
_flatGraphicsArrayController = [[NSArrayController alloc] initWithContent:doc.flattenedObjects];
}
... et parfois un EXC_BAD_ACCESS
passe au milieu de _flatGraphicsArrayController
Ce blocage a été déterminé comme étant causé par l'envoi de ce message NSKeyValueNotifyObserver
à un objet désalloué, un objet qui semble observer les modifications apportées à flatGraphicsArrayController
Pour moi, c'est très déroutant car l'objet qui possède cette propriété est juste instancié, alors comment pourrait-on observer des changements dans la propriété?
Quelqu'un a-t-il été enregistré pour observer une adresse de mémoire spécifique (si c'est ainsi que cela fonctionne), puis le flatGraphicsArrayController
a pris cet espace en mémoire, alors que l'observateur a été désalloué?
Merci pour la réponse; Voilà à quoi ressemblait le problème. Que se passe-t-il lorsqu'un objet d'un type différent occupe l'espace mémoire de l'ancien Object2? –
De rien. Je ne suis pas sûr de ce que vous demandez. Il est fort probable que "un objet d'un type différent occupe l'espace mémoire de l'ancien Object2" dans ce cas. C'est le but. –
Ainsi, le système KVO ne se soucie pas de l'objet observé: s'il est libéré et remplacé par un objet de type différent, et que ce nouvel objet change, il envoie toujours des notifications? par exemple, quelque chose observe un objet Person. La personne est libérée. Un objet Chien remplace sa place en mémoire. L'objet chien change, l'observateur original reçoit-il une notification? Ou l'observateur original ne recevrait-il la notification que si l'objet Personne était remplacé par une autre personne? –