gpt4 book ai didi

ios - 对于完全以编程方式创建的 UIView/UIViewController,loadView 与 viewDidLoad 中应该包含什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:05:50 24 4
gpt4 key购买 nike

出于实验目的,我正在尝试一些完全在代码中的东西。

我有一个自定义根 UIView/UIViewController 子类对,分别称为 RootView 和 RootViewController。

我还有一个名为 RenderView 和 RenderViewController 的 GLKView/GLKViewController 子类对。

两个 UIViewController 子类都在它们的 loadView 覆盖中创建它们的托管 View 。

设置主 RootViewController/RootView 很简单。在我的 AppDelegate 子类中,我创建了主窗口并像这样分配 rootViewController proeprty ...

#import "AppDelegate.h"
#import "RootViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
CGRect screenBounds = [[UIScreen mainScreen] bounds];

// Set up the window
UIWindow* mainWindow = [[UIWindow alloc] initWithFrame:screenBounds];
mainWindow.rootViewController = [RootViewController new];
self.window = mainWindow;

[mainWindow makeKeyAndVisible];

return YES;
}

@end

RootView 完全按照预期出现在屏幕上。

然而,我想知道的是关于 View 层次结构的初始化。 RootViewController 有一个属性来保存 RenderViewController 的实例,并且它的 RenderView 将(最初)放置在框架中,该框架存储在 RootViewController 的第二个属性中,称为 renderViewFrame。

我的问题是设置该层次结构的合适位置在哪里?

文档说明这正是 UIViewControllerloadView 的用途,所以这就是我在那里所做的...

- (void)loadView
{
self.view = [[RootView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// Set up the RenderViewController
RenderViewController* renderViewController = [RenderViewController new];
[self addChildViewController:renderViewController];

renderViewController.view.frame = self.renderViewFrame;
[self.view addSubview:renderViewController.view];

self.renderViewController = renderViewController;
}

...它有效,但我看到有些人说不,我应该将与创建 RenderView/RenderViewController 相关的所有内容移动到 RootViewController 的 viewDidLoad 而不是 loadView ,但没有人能说出为什么。我的意思是它是层次结构的一部分,这正是 loadView 的用途。

如果我是对的,那么如果我们已经在 loadView 中进行初始化,那么我/任何人为什么还需要使用 viewDidLoad,或者仅仅是当内存可以在 iOS6 中一直卸载 View 时的神器?

最佳答案

Apples 文档实际上说只是在 loadView 上加载 View 而不做任何其他事情,然后

If you want to perform any additional initialization of your views, do so in the viewDidLoad method.

从技术上讲,这两种方法都可以工作,它只是关于分离关注点并将逻辑放在最有意义和预期被发现的地方。

如果该方法是 loadViewHierarchy 则请穿上 Boot 。在 99.9999...% 的所有应用程序中,额外的 View 将被添加(在 NIB 中或)在 viewDidLoad 中。

关于ios - 对于完全以编程方式创建的 UIView/UIViewController,loadView 与 viewDidLoad 中应该包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37579090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com