尝试通过阅读explanation来理解Objectice-C中的强弱参考,这对我来说是完美的。但有一种情况我无法弄明白。
假设它在ARC环境中,我将使用 - (连字符)作为强引用,而(。)作为弱引用。假设我有一个View Controller对象MyViewController vc = [MyViewController alloc] init];
,它有视图,所以它们的关系就像
vc ------ view
有很强的参考价值。解除分配vc
后,view
也将被解除分配。
如果我想在视图中添加子视图,例如,UILabel,从Interface Builder并将其连接到对象,通常我会声明一个弱引用ivar @property (weak, nonatomic) IBOutlet UILabel *myLabel
,因为该视图已经有一个强引用它。所以现在关系看起来像
vc ------ view ------ myLabel
和
vc .................. myLabel
因此,当vc
被取消分配时,view
将被取消分配,然后myLabel
也会被取消分配。但是,如果我在vc
和mylabel
之间设置了强大的引用,那么现在之间的关系就会变成
vc ------ view ------ myLabel
和
vc ------ myLabel
当vc
被解除分配时,myLabel是否也会被取消分配?我是这么认为的,因为现在没有任何对象强烈引用它。但我想确定一下。如果我在这里遗漏任何东西,请告诉我。提前谢谢。
答案 0 :(得分:1)
首先 - 很好地解释你的问题,做得好。
对您的问题的简短回答 - 当vc
被取消分配时,myLabel
也会被解除分配,即使它有强烈的引用权。
因为强/保持关系的作用或方式如何。这是一些伪代码
vc --- view --- myLabel
vc.dealloc {
[myLabel release]; // reduces retainCount by 1, doesn't dealloc
[view release]; // reduces retainCount by 1, triggers dealloc
}
view.dealloc {
[myLabel release]; // triggers dealloc
}