在iPhone应用程序中使用视图和视图控制器时,有人能解释loadView和viewDidLoad之间的区别吗?
我的个人背景是,我根据代码构建所有视图,如果这有什么不同,我不会也不会使用Interface Builder.
我发现,当我向loadView添加init代码时,通常会得到无限的堆栈跟踪,所以我通常会在viewDidLoad中构建所有子视图...但我真的不清楚每一个都是在什么时候执行的,以及在什么地方放置init代码更合适.最好是一个简单的初始化调用图.
谢谢!
在iPhone应用程序中使用视图和视图控制器时,有人能解释loadView和viewDidLoad之间的区别吗?
我的个人背景是,我根据代码构建所有视图,如果这有什么不同,我不会也不会使用Interface Builder.
我发现,当我向loadView添加init代码时,通常会得到无限的堆栈跟踪,所以我通常会在viewDidLoad中构建所有子视图...但我真的不清楚每一个都是在什么时候执行的,以及在什么地方放置init代码更合适.最好是一个简单的初始化调用图.
谢谢!
我可以猜到这里可能有什么问题,因为我已经做到了:
我发现,当我将初始化代码添加到loadView中时,通常会得到无限的堆栈跟踪
Don't read self.view in -loadView.只有set它,不要get它.
self .视图属性访问器calls-如果当前未加载视图,则加载视图.这就是你的无限递归.
以编程方式在loadView中构建视图的通常方法(如Apple的Pre-Interface-Builder示例所示)更像这样:
UIView *view = [[UIView alloc] init...];
...
[view addSubview:whatever];
[view addSubview:whatever2];
...
self.view = view;
[view release];
我也不怪你没有用IB.我在所有的Instapaper中都坚持使用这种方法,并且发现与处理IB的复杂性、界面怪癖和意想不到的幕后行为相比,使用它要舒服得多.