第一、程序的入口和生命周期
每个程序都有一个main.m这个类,内部有一个main方法,而这个方法我们看到和C语言中的main函数形式是一致的,入口就在这里,那么这里干了一件事就是托付应用程序的代理对象AppDelegate类,也就是把整个应用程序的逻辑都托付给了AppDelegate类,在iOS中这种方式叫做代理,然后UIApplicationMain类就会和AppDelegate类进行交互,比如应用的生命周期,事件处理等。
在这个AppDelegate类中我们可以看到很多时机的回调方法,这个就是和应用的生命周期方法相关联的,下面就来一一分析这些方法的回调时机:
1、告诉代理启动基本完成程序准备开始运行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2、告诉代理进程启动但还没进入状态保存
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
3、当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
- (void)applicationWillResignActive:(UIApplication *)application
4、当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
- (void)applicationDidEnterBackground:(UIApplication *)application
5、当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反
- (void)applicationWillEnterForeground:(UIApplication *)application
6、当应用程序入活动状态执行,这个刚好跟上面那个方法相反
- (void)applicationDidBecomeActive:(UIApplication *)application
7、当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作
- (void)applicationWillTerminate:(UIApplication *)application
8、当应用接收到内存警告回调方法
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
1> view初始化完毕后,就会调用控制器的viewDidLoad方法
2> view初始化完毕后,就会把这个根控制器的view添加到窗口中
3> 当view即将被添加到窗口中时,就会调用控制器的viewWillAppear:方法
4> 当view已经被添加到窗口中时,就会调用控制器的viewDidAppear:方法
5> 如果控制器的view即将从窗口中移除时,就会调用控制器的viewWillDisappear:方法
6> 如果控制器的view已经从窗口中移除时,就会调用控制器的viewDidDisappear:方法
7> 如果控制器接收到内存警告的时候,就会调用控制器的didReceiveMemoryWarning方法
didReceiveMemoryWarning方法的默认实现是:如果控制器的view没有显示在窗口中,也就是说controller.view.superview为nil时,系统就会销毁控制器的view.
9> 如果控制器的view以前因为内存警告被销毁过,现在需要再次访问控制器的view时,会重复前面的步骤初始化view。