Słaba właściwość jest ustawiona na nil w dealloc, ale ivar nie jest zerowy
Zauważyłem, że w Objective-C z włączoną funkcją ARC:
Miejmy prostą klasę A i autosyntetyzowaną słabą własność
@interface A
@property (nonatomic, weak) id refObject;
@end
@implementation A
@end
I druga klasa B z implementacją dealloc
@interface B
@end
@implementation B
-(void) dealloc
{
NSLog(@"In dealloc");
}
@end
I wreszcie gdzieś w klasie A mają następujące cechy:
@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
Jeśli ustawię punkt przerwania w[B dealloc]
i sprawdź[A refObject]
nieruchomość widzę toa.refObject
jest zero, alea->_refObject
nie jest zerowa i wskazuje na „b”
Jakieś pomysły, dlaczego tak się dzieje?