整理印象笔记之 应用程序启动原理
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
1、执行main函数,在mian函数中执行UIApplicationMain函数
2、在mian函数中创建UIApplication对象
2、创建UIDelegate对象,并成为UIApplication对象代理,
3、开启一个主运行循环,处理事件(Runloop)
4、加载info.plist,并且判断有没有指定的mian.storyboard,如果指定就去加载,如果没有则需要在AppDelegate的程序启动完成只会代码加载
在加载storyboard时会作以下操作
- 创建一个窗口
- 加载main.storyboard,并且加载 main.storyboard指定的控制器
- 把新创建的控制器作为窗口的控制器显示出来
没有指定main则在代码里加载
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建窗口(必须要有尺寸且不可被释放)
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
//创建窗口的控制器
UIViewController *vc = [[UIViewController alloc]init];
//设置窗口根控制器
self.window.rootViewController = vc;
//窗口的显示
[self.window makeKeyWindow];
return YES;
}
5、监听系统事件(AppDelegate里的那些系统方法)
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
}
- (void)applicationWillTerminate:(UIApplication *)application {
}
@end
6、iOS程序启动完后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,将控制器的View添加至UIWindow上,