关于UIView Objective-C的多个强引用

时间:2014-04-19 08:01:12

标签: objective-c memory-management

尝试通过阅读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也会被取消分配。但是,如果我在vcmylabel之间设置了强大的引用,那么现在之间的关系就会变成

vc ------ view ------ myLabel

vc ------ myLabel

vc被解除分配时,myLabel是否也会被取消分配?我是这么认为的,因为现在没有任何对象强烈引用它。但我想确定一下。如果我在这里遗漏任何东西,请告诉我。提前谢谢。

1 个答案:

答案 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
}