gpt4 book ai didi

iphone - AppDelegate、RootViewController 和 UIApplication 之间是什么关系?

转载 作者:太空狗 更新时间:2023-10-30 03:11:04 31 4
gpt4 key购买 nike

我试图找出 appdelegate、RootViewControoler 和 UIApplication 之间的关系。到目前为止,这是我的一些想法:

When starting your application up, main.m gets loaded.

From here, your MainWindow.xib gets loaded.

In your MainWindow.xib, your File's Owner is of type UIApplication.

You set your UIApplication's delegate to your AppDelegate.

In your AppDelegate's source code, you can set your RootViewController to be the first view shown.

这样对吗?什么提示 AppDelegate 最初运行它是

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { }

方法?

最佳答案

当 Objective-C 应用程序启动时,它首先运行名为 main() 的函数。它不必位于文件“main.m”中,但 Xcode 向导就是这样设置的。

在向导生成的 main() 函数中,有这一行:

int retVal = UIApplicationMain(argc, argv, nil, nil);

这就是构成整个应用程序的“UIKit”框架的启动。在 UIApplicationMain 中,创建了一个 UIApplication 类型的对象。应用程序启动时 UIApplication 所做的部分工作是调用 UIApplication 类的委托(delegate)成员上的 applicationDidFinishLaunchingWithOptions 方法。此委托(delegate)在 MainWindow.xib 文件中设置为您的 ProjectAppDelegate 类的实例,该类是符合 UIApplicationDelegate 协议(protocol)的 NSObject 的子类。

What prompts AppDelegate to initially run it's ...

因为在您的 MainWindow.xib 文件中,您已经将文件所有者(即 UIApplication 对象)的“委托(delegate)”导出连接到 .xib 文件中的 UIApplicationDelegate 对象(项目向导实际上进行了连接),并且 UIApplicationDelegate 的类设置为您应用的 UIApplicationDelegate 子类。

“MainWindow.xib”并没有什么神奇之处,它可以被称为“Foo.xib”,重要的是你的Info.plist文件中名为“Main nib file base name”的属性是“MainWindow”。尝试将 MainWindow.xib 重命名为 Foo.xib 并将 Info.plist 中的“Main nib file base name”更改为“Foo”,您会发现它仍然有效。

编辑:更多关于 RootController

同样,所谓的“RootController”并没有什么神奇之处。这只是 Xcode 新建项目向导为您创建的 UIViewController 子类的名称。

向导在项目中放置了两个类的代码:ProjectAppDelegate 和 ProjectViewController。 ProjectAppDelegate 类包含两个导出成员:

IBOutlet UIWindow *window;
IBOutlet ProjectViewController *viewController;

在 MainWindow.xib 文件中,放置了 UIWindow 和 ProjectViewController 的实例,并连接到 ProjectAppDelegate 中的上述 socket 。

让你的东西出现在屏幕上的是你的 ProjectAppDelegate 类中的这段代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.

// Add the view controller's view to the window and display.
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];

return YES;
}

同样,这并没有什么神奇之处:项目向导创建了将“根”ViewController 的 View 添加到窗口 View 的代码,并使窗口可见。您的“根” View Controller 是在 .xib 文件中创建的,并连接到 ProjectAppDelegate 导出。

在不使用向导中的任何文件的情况下,尝试完全由您自己创建应用程序是非常有指导意义的。您将了解到很多有关 .xib 文件的工作原理以及它们与代码对象的关系。

关于iphone - AppDelegate、RootViewController 和 UIApplication 之间是什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4953948/

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