Cocoa touch 在解除锁定之前,对正在解除锁定的对象的弱引用为nil
假设B对A有弱引用,A对B有强引用 在A的解除锁定中Cocoa touch 在解除锁定之前,对正在解除锁定的对象的弱引用为nil,cocoa-touch,cocoa,memory-management,automatic-ref-counting,Cocoa Touch,Cocoa,Memory Management,Automatic Ref Counting,假设B对A有弱引用,A对B有强引用 在A的解除锁定中 - (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之前调用某个方法?两
- (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.A)您在代码中声明:
。。。对A的弱引用,它为零
1.B)在你的问题中,你陈述:
…为什么弱引用不是零
根据上文第1.A)段,该值与预期值一样为零
2.A)你在问题中陈述 …在解除锁定后 2.B)在代码中,您在dealloc方法中调用函数
foo
dealloc完成后不执行Foo。一旦您从Dealloc方法返回,就会完成Dealloc。另外,您没有调用
[super dealloc]
,如果使用ARC,这是可以的,但是如果您没有使用自动引用计数,它将丢失。但是当A调用B的foo时,B在A上的弱指针已经为零,甚至当A的dealloc没有完成Yet时,当调用dealloc时,A终止所有指向自身的弱指针,虽然它仍然有自己的强指针。是的,但如何避免。。。或者有没有一个方法在dealloc之前被调用,其中弱引用一个dont hold nil?弱引用并不意味着责任或所有权。因此,你永远不能指望它不是零。请参见此。可能的副本