假设 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 U?这是什么原因,我可以预防吗?是否有一些方法在 dealloc 之前被调用?
两个不一致之处:
1.A(在您的代码中,您声明:
。对 A 的弱引用,即 nil
1.B(在您的问题中,您指出:
。为什么弱引用不为零
根据上述 1.A(,它如预期的那样为零。
2.A(在你的问题中,你说
。交易完成后
2.B(在代码中调用函数 foo
在 dealloc 方法中
Foo在交易完成后不会执行。Dealloc 在您从 dealloc 方法返回后完成。此外,您不会调用[super dealloc]
如果使用 ARC 是可以的,但如果您不使用自动引用计数,则会丢失它。