现在一直延续一个习惯,就是凡事代码中没有用到的方法,一般都会去掉(特别特殊情况例外), 比如:在appdelageta.m中,除了didFinishLaunchingWithOptions: 这个方法,其他的方法,在刚开始创建程序的时候,都会去掉,要是有需要用到的,会在需要的时候再重新添加。但是在appdelegate.m中,会牵扯到一些特别常见的方法,这些方法关系到应用程序在前台或者后台运行的情况,比如NSTimer,推送,分享,支付和音视频等等 ...
基本的函数回调方法(运行顺序不安如下):
1:
/*代理仅仅是在进程启动而尚未进入状态保存阶段*/
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"willFinishLaunchingWithOptions");
return YES;
}
/*代理启动基本完成程序准备开始运行阶段*/
2:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"didFinishLaunchingWithOptions");
}
3:
/*应用程序进入活跃状态阶段,每次应用程序启动都会调用这个代理方法 (重新获取焦点,能够和用户交互)*/
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"applicationDidBecomeActive");
}
4:
/*应用程序即将进入非活动状态阶段,在这个阶段,应用程序不接收任何消息或者事件 (失去焦点,不可交互)*/
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"applicationWillResignActive");
}
5:
/*
通过UIBackgroundTaskIdentifier可以实现有限时间内在后台运行程序
程序进入后台时调用applicationDidEnterBackground函数,
*/
/*当应用程序在后台运行的时候,一般情况下,所有的进程会被系统自动杀死,这个时候如果还想继续在后台情况下运行,就需要这个函数中设置*/
- (void)applicationDidEnterBackground:(UIApplication *)application
{
/*在这里我用到的主要是关于NSTimer用法,当进入后台后依旧像继续使用定时器功能的,在这个函数中写,具体讲解,在我的另一篇简书分享中有详细讲解*/
NSLog(@"applicationDidEnterBackground");
}
6:
/*当从后台挂起状态重新回到前台是调用,比如点击home键之后,重新打开程序的时候
(一般在该方法中恢复应用程序的数据和状态)*/
- (void)applicationWillEnterForeground:(UIApplication *)application
{
/*当我们(未杀死进程的状态)点击home 键,关闭或者开启推送状态的再回到应用程序的时候,可以在这个方法中设置一个KVO通知,来实时更新推送的状态*/
NSLog(@"applicationWillEnterForeground");
}
7
/*当程序即将被销毁的时候调用该方法(应用进程被杀死),通常是用来保存数据和一些退出前的清理工作。
这个需要要设置UIApplicationExitsOnSuspend的键值,注意:应用程序挂起的时候,无法调用这个方法*/
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"applicationWillTerminate");
}
/*当程序载入后运行*/
- (void)applicationDidFinishLaunching:(UIApplication*)application
{
NSLog(@"applicationDidFinishLaunching");
}
上面几个方法是最基本的用法,在下面,来讲解一下在其他情况下 ,调用的函数回调方法
1:在调用第三方库的时候,会调用如下方法,比如支付,分享
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"openURL");
/*其中根据url的截取来判断自己接下来需要的操作步骤*/
}
2: 下面一个协议方法,主要是调用推送的时候,当我们的应用程序不论是在进程杀死的状态,前台状态,亦或是后台状态,只要我们点击这个推送的消息,都会来运行这个方法(获取device_token)
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(nonnull NSData *)deviceToken {
NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<" withString:@""] stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"\n\ndeviceToken:%@", token);
}
3:以后有关于类似的知识点,会陆续分享,谢谢阅读到最后
参考链接 appdelagete中的函数回调方法