在完成 dealloc 之前,对正在解除分配的对象的弱引用为 nil



假设 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 是可以的,但如果您不使用自动引用计数,则会丢失它。

相关内容

最新更新