在 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/