AppDelegate生命周期

import “AppDelegate.h”

>> app 启动完成 程序准备开始运行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { }
>> app 进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application {   }
>> app 进入活跃状态
- (void)applicationDidBecomeActive:(UIApplication *)application {   }
<< app 进入非活跃状态 如:打开状态栏 来电话等等,只会调用此方法。不会调用进入后台
- (void)applicationWillResignActive:(UIApplication *)application {   }
<< app 进入后台 会调用 (app 进入非活跃状态)的方法
- (void)applicationDidEnterBackground:(UIApplication *)application {   }
<< app 即将推出
- (void)applicationWillTerminate:(UIApplication *)application {   }

添加通知

app进入活跃状态
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];
// app进入非活跃状态
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil];
// app进入前台
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
// app进入后台
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground) name: UIApplicationDidEnterBackgroundNotification object:nil];

程序调用顺序

程序启动调用顺序:

1.app 启动完成 程序准备开始运行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2.app 进入活跃状态
- (void)applicationDidBecomeActive:(UIApplication *)application

打开状态栏调用顺序

1.app 进入非活跃状态

关闭状态栏调用顺序

1.app 进入活跃状态 「 有延迟 大约1s 」

进入后台调用顺序 --> 点击Home键

1.app 进入非活跃状态
- (void)applicationWillResignActive:(UIApplication *)application
2.app 进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application

进入前台调用顺序

1.app 进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application
2.app 进入活跃状态
- (void)applicationDidBecomeActive:(UIApplication *)application

双击Home键盘

1.app 进入非活跃状态
- (void)applicationWillResignActive:(UIApplication *)application

杀死app

1.app 进入非活跃状态
- (void)applicationWillResignActive:(UIApplication *)application
2.app 进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
3.app 即将推出
- (void)applicationWillTerminate:(UIApplication *)application

AppDelegate流程

AppDelegate流程图.png
1.程序入口

进入main函数,设置AppDelegate为代理

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

原型:
UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

principalClassName (主要类名) 和 delegateClassName (委托类名)。

(1) 如果principalClassName是nil,那么它的值将从Info.plist去获取,如果Info.plist没有,则默认为UIApplication。principalClass这个类除了管理整个程序的生命周期之外什么都不做,它只负责监听事件然后交给delegateClass去做。

(2) delegateClass 将在工程新建时实例化一个对象。NSStringFromClass([AppDelegate class])

2.程序完成加载

[AppDelegate application:didFinishLaunchingWithOptions:]

3.创建UIWindows

@property (strong, nonatomic) UIWindow *window;//AppDelete.h自带的属性

4.程序被激活

[AppDelegate applicationDidBecomeActive:]

5.调用程序

安上述程序调用顺序调用程序

6.点击home键(模拟器点击command+shit+h时,手机相当于home键)

1.程序取消激活状态
[AppDelegate applicationWillResignActive:];
//一种是即将进入后台状态会调用此方法,还有可能是当有电话进来或短信进来或锁屏等情况下,这时应用程序挂起进入非活动状态,也就是手机界面还是显示着你当前的应用程序的窗口,只不过被别的任务强制占用了,

2.程序进入后台
[AppDelegate applicationDidEnterBackground:];
//指当前窗口不是你的App,大多数程序进入这个后台会在这个状态上停留一会,时间到之后会进入挂起状态(Suspended)。如果你程序特殊处理后可以长期处于后台状态也可以运行。

3.Suspended (挂起):
程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

7.点击app进入再次程序

程序即将进入前台
[AppDelegate applicationWillEnterForeground:]
程序被激活
[AppDelegate applicationDidBecomeActive:];

===============================================
https://www.jianshu.com/p/01bcf1d2b5c1

你可能感兴趣的:(AppDelegate生命周期)