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?

questionAnswers(1)

yourAnswerToTheQuestion