由于AppDelegate中的回调函数非常多, 使用起来感觉很混乱, 不知道什么情况该用哪个回调函数. 于是百度+实测整理出来了一些常用回调函数的调用时机, 发出来做个笔记, 也供大家参考参考

  1. – (void)applicationDidFinishLaunching:(UIApplication *)application;
    

    当应用程序启动时(不包括已在后台的情况下转到前台),调用此回调。此方法基本已经弃用,改用第2个方法代替。

  2. – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
    

    当应用程序启动时(不包括已在后台的情况下转到前台),调用此回调。launchOptions是启动参数,假如用户通过点击push通知启动本应用,这个参数里会存储一些push通知的信息。而如果用户通过其它应用或URL链接启动本应用(openURL), 则这个参数里会存储一些启动本应用的应用和URL的一些信息。

  1. – (void)applicationDidBecomeActive:(UIApplication *)application;
    

    当应用程序全新启动,或者在后台转到前台,完全激活时,都会调用这个方法。如果应用程序是以前运行在后台,这时可以选择刷新用户界面。

  2. – (void)applicationWillResignActive:(UIApplication *)application;
    

    当应用从活动状态主动到非活动状态的应用程序时会调用这个方法。这可导致产生某些类型的临时中断(如传入电话呼叫或SMS消息)。或者当用户退出应用程 序,它开始过渡到的背景状态。使用此方法可以暂停正在进行的任务,禁用定时器,降低OpenGL ES的帧速率。游戏应该使用这种方法来暂停游戏。
    调用时机可能有以下几种:锁屏,按HOME键,下接状态栏,双击HOME键弹出低栏,等情况。

  3. – (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
    

    这个方法已不再支持,可能会在以后某个版本中去掉。建议用下面第6个方法代替

  4. – (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
    

    当用户通过其它应用启动本应用时,会回调这个方法,url参数是其它应用调用openURL:方法时传过来的。sourceApplication参数是打开本应用的应用的信息。

  5. – (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
    

    当应用可用内存不足时,会调用此方法,在这个方法中,应该尽量去清理可能释放的内存。如果实在不行,可能会被强行退出应用。

  6. – (void)applicationWillTerminate:(UIApplication *)application;
    

    当应用退出,并且进程即将结束时会调到这个方法,一般很少主动调到,更多是内存不足时是被迫调到的,我们应该在这个方法里做一些数据存储操作。

  7. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken NS_AVAILABLE_IOS(3_0);
     - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error NS_AVAILABLE_IOS(3_0);
    

    当客户端注册远程通知时,会回调上面两个方法。
    如果成功,则回调第一个,客户端把deviceToken取出来发给服务端,push消息的时候要用。
    如果失败了,则回调第二个,可以从error参数中看一下失败原因。

    注:注册远程通知使用如下方法:

    UIRemoteNotificationType t=UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound;
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:t];
    
  8. – (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
    

    当应用在前台运行中,收到远程通知时,会回调这个方法。
    当应用在后台状态时,点击push消息启动应用,也会回调这个方法。

  9. – (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
    

    当应用收到本地通知时会调这个方法,同上面一个方法类似。
    如果在前台运行状态直接调用,如果在后台状态,点击通知启动时,也会回调这个方法

  10. – (void)applicationDidEnterBackground:(UIApplication *)application;
    

    当用户从台前状态转入后台时,调用此方法。使用此方法来释放资源共享,保存用户数据,无效计时器,并储存足够的应用程序状态信息的情况下被终止后,将应用 程序恢复到目前的状态。如果您的应用程序支持后台运行,这种方法被调用,否则调用applicationWillTerminate:用户退出。

  11. – (void)applicationWillEnterForeground:(UIApplication *)application;
    

    当应用在后台状态,将要进行动前台运行状态时,会调用此方法。
    如果应用不在后台状态,而是直接启动,则不会回调此方法。