La propiedad débil se establece en nulo en dealloc pero el ivar de la propiedad no es nulo
Noté lo siguiente en Objective-C con ARC habilitado:
Tengamos la clase A simple y la propiedad débil autosintetizada
@interface A
@property (nonatomic, weak) id refObject;
@end
@implementation A
@end
Y segunda clase B con dealloc implementado.
@interface B
@end
@implementation B
-(void) dealloc
{
NSLog(@"In dealloc");
}
@end
Y finalmente, en algún lugar de la clase A tenemos lo siguiente:
@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
Si establezco un punto de interrupción en[B dealloc]
e inspeccionar[A refObject]
propiedad puedo ver quea.refObject
es nulo peroa->_refObject
no es nulo y apunta a 'b'
¿Alguna idea de por qué sucede eso?