【问题标题】:Weak References for subviews created in a UIViewController [duplicate]在 UIViewController 中创建的子视图的弱引用 [重复]
【发布时间】:2018-01-17 20:45:09
【问题描述】:

假设我以编程方式创建了一个 UILabel,然后将其作为子视图添加到我自己的 UIViewController 子类的主视图中。我还想在我的视图控制器的类级别存储对它的引用,以便以后可以使用它。我应该将其设为弱参考吗? 更重要的是为什么?

我看到人们一直这样做,但我不明白。我认为弱引用的目的是避免保留循环,但这里没有保留循环。

我当然在人们使用故事板/笔尖的代码中看到了这一点(我从未尝试过使用,所以我只了解非常基本的水平),但即使在那里我也不明白为什么弱引用是合适的。那里也没有保留周期,对吧?

【问题讨论】:

  • 我不认为这与您引用的内容重复,因为我主要关心的是子视图而不是插座的程序化创建。

标签: ios weak-references


【解决方案1】:

不,没有理由将其视为弱引用,您已正确地将其识别为单向关系。过去,Interface Builder 代码生成器默认生成弱引用(这可能是您经常看到它的原因。)Apple 对此的指导随着时间的推移发生了变化,您可以在此处阅读: Should IBOutlets be strong or weak under ARC?

【讨论】:

  • 问题是关于以编程方式创建的子视图,而不是 IBOutlet。
  • @JoshuaKaden:他在问题中提到了故事板/笔尖,所以为了清楚起见,我添加了这个细节。
  • @JoshuaKaden - 另外,问题基本相同。视图层次结构将保留强引用,因此您不需要保留对它的强引用。但是weak 引用不是免费的(诚然,开销可以忽略不计)。此外,当以编程方式创建要保存在某个弱引用中的子视图时,您必须编写代码以将子视图保存在某个局部变量中,同时将视图添加到层​​次结构并保存引用。底线强引用产生更简单的代码,只要没有引用循环就很好。
猜你喜欢
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2015-09-04
相关资源
最近更新 更多