gpt4 book ai didi

objective-c - Main 中 UIApplicationMain 之后的 Objective C 执行顺序是什么?

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

有人可以解释一下 iOS 应用程序中的执行控制流程吗?我知道 UIApplicationMain 首先从 main 调用。然后呢?我定义的方法和main有什么关系?是完全由事件驱动还是可以有一些结构化的顺序?

我不是故意这么含糊,我只需要知道从哪里开始。也许我以错误的方式看待这个问题。

例如,在 C++ 中我会做类似的事情:

#include "myMethods.h"
int main (int argc, char * const argv[]) {

Method1(); // Initialization
Method2(); // Opening views and options
Method3(); // Meat of the program

return 0;
}

提前致谢。

最佳答案

因此,正如您提到的,main.m 中的 main() 函数是起点,然后调用 UIApplicationMain() .如果你查看文档,你会看到 UIApplicationMain接受四个参数:

  • argc,
  • *参数[],
  • *校长类(class)名
  • *委托(delegate)类名。

其中前两个只是从 main() 传递的参数计数和变量列表。但是第三个和第四个参数是指向 NSStrings 的指针。第三个参数指定哪个类应该是 UIApplication .除非您打算对 UIApplication 进行子类化,否则您可以为第三个参数指定 nil。第四个参数指定哪个类应该是 UIApplication 的委托(delegate)类,它将响应 UIApplicationDelegate 中指定的任何内容。协议(protocol)。您不必直接处理它,因为它包含在所有 Xcode 模板中:

int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

不要让 NSStringFromClass([AppDelegate class])) 把你搞砸了。这只是指定第四个参数的一种奇特方式,以便在您稍后更改 AppDelegate.m 的名称时调用正确的委托(delegate)。

UIApplication 启动 main event loop并调用 -application:didFinishLaunchingWithOptions:,这是其委托(delegate)必须处理的方法之一。查看 AppDelegate.m,您会找到此方法的一些模板代码。这是您可以开始自定义的地方,创建在 UIWindowUIView 的其他实例创建之前需要到位的东西:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}

因此,现在应用程序窗口和 Root View Controller 已定义,应用程序已关闭并运行。

所有这些,以及更多,在这里得到了很好的解释:http://oleb.net/blog/2012/02/app-launch-sequence-ios-revisited/

关于objective-c - Main 中 UIApplicationMain 之后的 Objective C 执行顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083576/

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