AppDelegate
控制器View的生命周期顺序

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"%s",__func__);
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"%s",__func__);
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"%s",__func__);
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"%s",__func__);
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"%s",__func__);
}
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"%s",__func__);
}
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
NSLog(@"%s",__func__);
}
UIApplication
- 1、在哪设置UIApplication的代理,需要了解ios程序的启动过程.
- 创建application,创建并且设置application的代理
- 开启事件循环,不断监听事件。如果产生系统事件,就会通知代理,其他事件,会找到一个最合适的视图处理事件。 2.3>只有应用程序关闭,才会结束程序
- 2、UIApplicationMain函数:PPT演示
- 注意UIApplicationMain函数会开启一个事件循环,并不会马上就执行完
毕。
- 底层做的事情,创建UIApplication对象和UIApplicationDelegate对象,设置
UIApplication的代理,开启事件循环,监听系统事件。
- delegateClassName不能传nil,这里传nil,意味着application没有 代理,就无法监听系统的事件,系统的事件都没法监听,窗口都不知道 什么时候去加载,因为视图都是懒加载的,因此就不会创建窗口,什么 东西都没有。
- principalClassName传nil,默认是UIApplication,创建一个 UIApplication对象。
- 3、UIApplication代理的作用:处理系统事件,不是任何事件都交给他处理,按 钮点击,屏幕点击都不是他处理,是由UIApplication处理。
- 加载完成,初始化的操作
- 进入后台:一般在这里保存应用的数据(游戏数据,比如暂停游戏) 2.3>内存警告:清空不必要的内容
UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName);
return UIApplicationMain(argc, argv, nil,NSStringFromClass([AppDelegate class]));
UIApplicationMain底层实现
- 1、根据principalClassName提供类名创建UIApplication对象
- 2、创建UIApplicationDelegate对象,并且成为UIApplication对象代理,app.delegate = delegate
- 3、开启一个主运行循环,处理事件,可以保持程序一直运行。
- 4、加载info.plist,并且判断有木有指定main.storyboard,如果指定,就会去加载
- 根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(如果有storyboard)
- 创建UIWindow
- 创建和设置UIWindow的rootViewController
- 显示窗口