UIWindow 和 UIView addSubview 问题

Posted

技术标签:

【中文标题】UIWindow 和 UIView addSubview 问题【英文标题】:UIWindow and UIView addSubview Question 【发布时间】:2009-07-10 18:17:23 【问题描述】:

addSubview 方法是否真的将视图加载到应用程序中?我问的原因是因为我的应用程序中有两个两个视图。应用程序委托将两个视图添加为子视图,然后将其中一个视图放在前面。现在,我在每个视图的每个 viewDidLoad 方法中都有一个打印语句。当我运行应用程序时,应用程序委托将视图加载为子视图,并且在加载每个视图时,我实际上看到控制台打印出我放置在每个 viewDidLoad 方法中的语句。这应该是这样做的吗?

【问题讨论】:

【参考方案1】:

viewDidLoad 实际上是 UIViewController 的一个方法,而不是 UIView。它在视图加载到内存后被调用(在你的 init 方法之后,但在 awakeFromNib 之前)。您会注意到 addSubview: 将 UIView 作为参数,因此必须加载视图才能将视图添加到另一个视图。否则你会尝试添加一个虚构的视图。

在回答您的问题时,是的,它应该这样做。 viewDidLoad 在你 addSubview 之前很久就被调用了。事实上,如果您取出 addSubview: 行,您会注意到它仍在被调用(因为您正在创建视图的控制器)。

【讨论】:

所以如果我有 10 个视图...所有 10 个都加载了? “仅根据需要加载视图”发生了什么?所以“添加”一个子视图到一个窗口......真的只是“显示它”吗?真正执行 LOAD 这个视图的代码在哪里?【参考方案2】:

我的理解是视图是延迟加载的。如果您的 viewcontroller 有 10 个视图,则在您实际尝试访问它们之前,它们不会全部加载。

【讨论】:

以上是关于UIWindow 和 UIView addSubview 问题的主要内容,如果未能解决你的问题,请参考以下文章

UIWindow 和 UIView addSubview 问题

在变暗的 UIWindow 上显示 UIView

iOS:UIView 相对于 UIWindow 的起源

iOS小技能:特殊的UIView(UIWindow)

旋转后 UIView 坐标被交换但 UIWindow 不是?

UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍