Я заметил следующее в Objective-C с включенным ARC:
Пусть имеет простой класс A и автосинтезированное слабое свойство
@interface A
@property (nonatomic, weak) id refObject;
@end
@implementation A
@end
И второй класс B с реализованным dealloc
@interface B
@end
@implementation B
-(void) dealloc
{
NSLog(@"In dealloc");
}
@end
И, наконец, где-то в классе A есть следующее:
@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
Если я устанавливаю точку останова в [B dealloc]
и проверяю свойство [A refObject]
, я могу видеть, что a.refObject
равен nil, но a->_refObject
не равен nil и указывает на 'b'
Любые идеи, почему это происходит?