Ich bemerkte die folgend in Objective-C mit ARC aktiviert:Schwache Eigenschaft auf null in dealloc aber Ivar Eigentum ist nicht gleich Null
die einfache Klasse A haben lassen und autosynthesized schwache Eigenschaft
@interface A
@property (nonatomic, weak) id refObject;
@end
@implementation A
@end
Und zweite Klasse B mit dealloc implementiert
@interface B
@end
@implementation B
-(void) dealloc
{
NSLog(@"In dealloc");
}
@end
Und schließlich irgendwo in der Klasse A haben die folgende:
@implementation A
...
-(void) foo
{
B* b = [B new];
self.refObject = b;
// Just use b after the weak assignment
// in order to not dealloc 'b' before assignement
NSLog(@"%@", b);
}
...
@end
Wenn ich einen Haltepunkt in [B dealloc]
gesetzt und [A refObject]
Eigentum inspizieren kann ich sehen, dass a.refObject
Null ist aber a->_refObject
ist nicht gleich Null und zeigt auf ‚b‘
Irgendwelche Ideen, warum das passiert?
Vielleicht gibt die Accessor-Methode 'nil' zurück, wenn sie weiß, dass das schwache ref gelöscht werden sollte, aber die Instanzvariable selbst wird intakt gelassen (und freigegeben, und jetzt ist sie ein fliegender Zeiger). –
Ich denke, dass in Dealloc das Objekt noch gültig ist und noch nicht gelöscht. Sie heben die Registrierung zum Beispiel von NSNotificationCenter auf und können auf seine Eigenschaften zugreifen. –
"Sie können darauf zugreifen" bedeutet nicht unbedingt, dass es nicht freigegeben ist, aber ich kann mich irren. –