用于构建视图层次结构的 viewWillAppear 与 loadView

Posted

技术标签:

【中文标题】用于构建视图层次结构的 viewWillAppear 与 loadView【英文标题】:viewWillAppear versus loadView for building view hierarchy 【发布时间】:2011-03-10 09:18:47 【问题描述】:

我正在通过代码构建我的视图层次结构,并且想知道当从我的控制器请求视图时,在 loadView 中创建整个层次结构是否更好,然后在 viewWillAppear 方法中将视图动画到屏幕上,或者通过在 viewWillAppear 中构建整个层次结构来让事情变得更简单但可能需要更多的内存释放和分配会更好。

我的理解是控制器在第一次需要它时调用 loadView 来创建视图,然后尽可能长时间地保留它,以便您可以离开并返回到该控制器并在视图中进行动画处理,但不需要通过 viewWillAppear 重新创建和附加它们。

基本上,我发现在 loadView 中单独分配视图然后在 viewWillAppear 中转换(有时更新其中的内容)它们很麻烦,并且想知道保留视图的好处是否不超过只需重新创建它们(并因此重新初始化它们并避免任何未重置的值)。

【问题讨论】:

【参考方案1】:

loadView 在创建时只被调用一次,并且应该连接所有内容来创建视图。

viewWillAppear:(BOOL)animated 每次显示视图时都会被调用。如果您的视图被保留,您可以在此更新/设置您的数据。 (你的UIButtons,UILabels,...已经被loadView分配了,你就在这里设置内容吧。)

【讨论】:

感谢您的回复。我知道 loadView 仅调用一次,然后仅在操作系统需要释放内存时才重新调用。我的问题更多地涉及是否可以在每个 viewWillAppear 上删除和重新加载视图层次结构,这样做显着简化了实现(即数据通常需要在出现时刷新,这避免了错误地不重新初始化各种小部件)。例如,这样做意味着我不需要作为成员保留对我的各种标签的引用。 保留引用更简洁,因为例如,您必须在 dealloc 方法中释放它们并将它们设置为 nil 在视图中将消失。

以上是关于用于构建视图层次结构的 viewWillAppear 与 loadView的主要内容,如果未能解决你的问题,请参考以下文章

withNavigation 只能用于导航器的视图层次结构

用于设置自动布局约束的 iOS 视图层次结构

如何使用 json.net 构建用于序列化的对象层次结构?

如何检查 iOS 中的视图层次结构?

层次结构不适用于我的设备

致命例外:JavaBridge - 只有创建视图层次结构的原始线程才能接触其视图