ios - iPhone SDK : what is the difference between

在 iPhone 应用程序中使用 View 和 View Controller 时,谁能解释 loadView 和 viewDidLoad 之间的区别?

我个人的情况是,我从代码中构建所有 View ,我不会也不会使用 Interface Builder,如果这有什么不同的话。

我发现,当我将初始化代码添加到 loadView 时,我经常会得到一个无限的堆栈跟踪,所以我通常在 viewDidLoad 中构建我所有的 subview ......但我真的不清楚每个得到执行,以及放置 init 代码的更合适的位置是什么。最完美的是初始化调用的简单图表。

谢谢!

最佳答案

我可以猜到这里可能是什么问题,因为我已经做到了:

I've found that often when I add init code to loadView, I end up with an infinite stack trace

不要在-loadView中读取self.view。设置它,不要get它。

如果当前未加载 View ,则 self.view 属性访问器调用 -loadView。这就是你的无限递归。

在 -loadView 中以编程方式构建 View 的常用方法,如 Apple 的 pre-Interface-Builder 示例所示,更像是这样:

UIView *view = [[UIView alloc] init...];
...
[view addSubview:whatever];
[view addSubview:whatever2];
...
self.view = view;
[view release];

我不怪你没有使用 IB。我在所有 Instapaper 中都坚持使用这种方法,并且发现自己比处理 IB 的复杂性、界面怪癖和意想不到的幕后行为更舒服。

关于ios - iPhone SDK : what is the difference between loadView and viewDidLoad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573958/

相关文章:

objective-c - 关于iOS5 SDK中自动引用计数的一些问题

ios - 如何在 UITableView 中设置分隔符的全宽

ios - 无法同时满足约束,将尝试通过打破约束来恢复

ios - UIView 隐藏/显示动画

objective-c - 为什么在 C 中将 1,000,000,000 写为 1000*1000

ios - Objective-C 和 Swift URL 编码

iphone - 错误 : The service is invalid

ios - 使用 glob 获取目录中的文件列表

ios - 如何在 UILabel 中嵌入小图标

ios - 以编程方式在 UIStackView 中添加 View