小编pla*_*a__的帖子

dealloc中的弱属性设置为nil,但属性的ivar不是nil

我在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'

任何想法为什么会发生?

weak-references objective-c automatic-ref-counting

11
推荐指数
1
解决办法
3180
查看次数