在dealloc完成之前,对被释放的对象的弱引用是nil

时间:2013-11-25 13:00:50

标签: cocoa-touch cocoa memory-management automatic-ref-counting

假设B对A有弱引用,而A对B有强有力的参考

A 的dealloc

- (void)dealloc {

    [self.b foo];
    self.b = nil;

}

B 的foo

- (void)foo {

   NSLog(@"%@", self.a);
   //using self.a weak reference to A, which is nil; 

}

为什么在dealloc完成后弱引用不是nil?这是什么原因,我能预防吗?是否有一些方法可以在dealloc之前调用?

1 个答案:

答案 0 :(得分:0)

两个不一致的地方:

1.A)在您的代码中,您声明:

  

...对A的弱引用,即nil

1.B)在你的问题中,你说:

  

...为什么弱引用不是nil

根据上述1.A),预期为零。


2.A)在你提出的问题中你说明了

  

...... dealloc完成后

2.B)在您的代码中,您在dealloc方法中调用函数foo

在dealloc完成后不执行Foo。从dealloc方法返回后,Dealloc就完成了。此外,如果您使用ARC,则不会调用[super dealloc],但如果您没有使用自动引用计数,则会丢失它。