iPhoneSDK:loadView和viewDidLoad有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

当在iPhone应用程序中使用视图和视图控制器时,任何人都可以解释loadView和viewDidLoad之间的区别吗?

我的个人情况是,我从代码构建了所有的视图,如果这有所作为,我不会也不会使用Interface Builder。

我发现通常当我将init代码添加到loadView时,我最终得到了一个无限的堆栈跟踪,所以我通常在viewDidLoad中完成所有的子视图构建...但是当它们每个都被执行时,我真的不清楚,并且什么是放置init代码的更合适的地方。

提问于
用户回答回答于

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

我发现通常当我将init代码添加到loadView时,我最终得到了无限的堆栈跟踪

不要在-loadView中读取self.view。只有设置它,不要明白

如果当前未加载视图,则self.view 属性访问器将调用 -loadView。有你的无限递归。

正如苹果的Interface-Builder之前的例子中所展示的,在-loadView中以编程方式构建视图的常用方式更像这样:

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

我不怪你不使用IB。我坚持使用Instapaper的这种方法,发现自己比处理IB的复杂性,界面怪癖和意想不到的幕后行为更加舒适。

用户回答回答于

loadViewUIViewController实际加载视图并将其分配给view属性的方法。UIViewController如果你想以编程方式设置view属性,这也是子类的重载位置。

viewDidLoad是视图加载完成后调用的方法。这在调用loadView之后调用。这是一个可以覆盖并插入代码的地方,它可以在视图加载后对视图进行进一步的初始设置。

扫码关注云+社区