有人可以解释如何控制iOS应用程序中的执行流程吗?我知道UIApplicationMain首先从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;
}
提前致谢。
答案 0 :(得分:17)
因此,正如您所提到的,main()
中的main.m
函数是起点,然后调用UIApplicationMain()
。如果您查看文档,您会看到UIApplicationMain
有四个参数:
前两个只是从main()
传递的参数计数和变量列表。但第三和第四个参数是指向NSStrings的指针。第三个参数指定哪个类应为UIApplication
。除非您打算继承UIApplication
,否则为第三个参数指定nil
。第四个参数指定哪个类应该是UIApplication的委托类,它将响应UIApplicationDelegate
协议中指定的任何内容。您不必直接使用它,因为它包含在所有Xcode模板中:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
不要让NSStringFromClass([AppDelegate class]))
位扔掉你。这只是指定第四个参数的一种奇特方式,以便在您稍后更改AppDelegate.m
的名称时调用正确的委托。
UIApplication
启动main event loop并调用-application:didFinishLaunchingWithOptions:
,这是其委托必须处理的方法之一。看一下AppDelegate.m
,你会发现这个方法的一些模板代码。在这里,您可以开始自定义,创建在UIWindow
和其他UIView
实例创建之前需要的内容:
- (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;
}
因此,现在定义了应用程序窗口和根视图控制器,并且应用程序已关闭并正在运行。
所有这一切,以及更多,都在这里得到了极好的解释:http://oleb.net/blog/2012/02/app-launch-sequence-ios-revisited/
答案 1 :(得分:7)
正如您所说,UIApplicationMain在系统中创建应用程序执行。在应用程序加载过程中所做的事情中,我假设您对与特定应用程序相关的内容感兴趣。此外,我假设一个典型的案例,在Xcode提供的许多项目模板中都有说明。
应用程序加载过程会查看应用程序的信息属性列表。在那里找到“主nib文件基本名称”,应用程序的UIApplication实例从应用程序包中加载相应的nib文件。此nib文件指定应用程序委托类,并告诉将类的实例连接到UIApplication实例的委托属性。
根据主nib文件,也可以创建和连接其他对象,例如,应用程序的窗口,主视图控制器等。
现在加载序列结束,所有内容都是事件驱动的,从应用程序委托类开始,以获取着名的-applicationDidFinishLaunching:
消息。
答案 2 :(得分:2)
来自Apple文档 -
应用程序生命周期构成应用程序启动和终止之间发生的事件序列。在iOS中,用户通过点击主屏幕上的图标来启动您的应用程序。点击发生后不久,系统会显示一些过渡图形,并通过调用其主要功能继续启动应用程序。从现在开始,大部分初始化工作将移交给UIKit,UIKit将加载应用程序的主nib文件并准备事件循环。