App启动的完整过程
- main函数
- UIApplicationMain函数
- 创建UIApplication对象
- 创建UIApplication的delegate对象
- delegate对象开始处理(监听)系统事件
- 程序启动完毕就会调用代理的application:didFinishLaunchingWithOptions: 方法
- 在application:didFinishiLaunchingWithOptions:中创建UIWindow
- 创建和设置UIWindow的rootViewController
- 显示窗口
- 如果有storyboard,则根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard
- 创建UIWindow
- 创建和设置UIWindow的rootViewController
- 显示窗口
AppDelegate的代理方法
//程序已经启动完成
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions ;
//程序将要失去焦点
- (void)applicationWillResignActive:(UIApplication *)application ;
//程序已经进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application ;
//程序将要进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application ;
//程序已经获得焦点
- (void)applicationDidBecomeActive:(UIApplication *)application ;
//内存警告,可能要终止程序,清除不需要再使用的内存
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application ;
//程序将要退出
- (void)applicationWillTerminate:(UIApplication *)application ;
AppDelegate不同情景下的加载顺序
- 程序启动:依次调用已经启动完成方法和已经获得焦点方法
- 程序从前台退出到后台:依次调用将要失去焦点方法和已经进入后台方法
- 程序从后台进入到前台:依次调用将要进入前台方法和已经获得焦点方法
- 双击Home键切换程序:双击Home键时会调用将要失去焦点方法,选择其他应用时会调用已经进入后台方法
- 在前台双击Home键杀死程序:双击Home键时会调用将要失去焦点方法,上滑杀死程序时会调用已经进入后台方法和将要退出方法
- 从其他程序前台双击Home键杀死程序:只会调用将要退出方法
- 下拉通知栏或上拉工具栏:只会调用将要失去焦点方法