我在Objective-C中注意到以下内容,启用了ARC:
让我们有简单的A类和自动合成的弱属性
@interface A
@property (nonatomic, weak) id refObject;
@end
@implementation A
@end
Run Code Online (Sandbox Code Playgroud)
并且实现了dealloc的第二类B.
@interface B
@end
@implementation B
-(void) dealloc
{
NSLog(@"In dealloc");
}
@end
Run Code Online (Sandbox Code Playgroud)
最后,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
Run Code Online (Sandbox Code Playgroud)
如果我在中设置断点[B dealloc]
并检查[A refObject]
属性,我可以看到它a.refObject
是nil但a->_refObject
不是nil并且指向'b'
任何想法为什么会发生?