在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的复杂性、界面怪癖和意想不到的幕后行为相比,使用它要舒服得多.

Ios相关问答推荐

使用NavigationStack和.searchable时如何显示大型导航标题?

如何在SwiftUI中拥有基于操作系统版本的条件修饰符?

TrueDepth摄像机像素距离不准确

如何将模糊输入/模糊输出添加到SwiftUI中的非对称过渡?

如何在SwiftUI中顺时针和逆时针两个方向应用旋转效果?

用于HDR显示的CI上下文选项

磁盘上的Objective-C ISA指针与实例化对象时的比较

如何通过点击按钮滚动到 ScrollView 中的特定视图?

使用 AVCaptureDeviceTypeBuiltInTripleCamera 时 Select 合适的相机进行条码扫描

List touch Tabbar 时 SwiftUI Tabbar 消失

将 SwiftUI 与 @AppStorage 和动态函数调用一起使用

使用实时数据库的应用程序无法在被 Firebase 阻止的罗马尼亚 ISP 中运行

如何将 ImageView 放置在 UIView 的中心?

在iOS7半透明导航栏中获取正确的 colored颜色

每次运行后,Xcode 6 都会在 iOS8 模拟器中重命名我的应用程序目录.

判断从 JSON 字符串返回的 Objective-C 中的空值

使用 Xcode 的 All Exceptions 断点时忽略某些异常

在 NSUserDefaults 中存储值是否有任何限制?

在 iOS 上没有显示数字键盘

我可以在 UIScrollView 中使用 UIRefreshControl 吗?