这一节,主要讲解UIKit框架下,应用程序的生命周期,UIView的生命周期,,异常处理流程及控制器的加载过程。
四大对象关系图
应用程序生命周期
对上面的流程进行说明:
1. 程序启动执行,先进入main函数:
int main(int argc, char * argv[])2. 执行UIApplicationMain函数:return UIApplicationMain(argc, argv, nil, NSStringFromClass([HKAppDelegate class]));上面函数的
第1,第2个参数是系统main函数自动处理的参数,就不做说明了。
第3个参数:应用程序象征的类名(只能传UIApplication或其子类,若为nil,默认就是UIApplication)
第4个参数:UIApplication代理的类名
3. UIApplicationMain方法执行完毕后,就初始化完成UIApplication并利用它的代理开启消息循环机制。
4. 代理监听事件是一个run loop,会一直监听上图所列举的那些事件,直到程序退出。
控制器的初始化过程
在应用程序生命周期过程中,在“程序加载完毕”,即- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中,应该完成"根控制器"的初始化工作。
大致代码如下:
– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];// Override point for customization after application launch.self.window.backgroundColor = [UIColor redColor];self.viewController = [[LFViewController alloc] initWithNibName:@"LFViewController" bundle:nil];// 显示控制器的View[self.window addSubview:self.viewController.view];// 设置窗口的根控制器self.window.rootViewController = self.viewController;[self.window makeKeyAndVisible];return YES;}1. 一定要对定义的viewController属性进行强引用工作,不然 didFinishLaunchingWithOptions 方法执行完毕后,LFViewController 对象就销毁了。@property (strong, nonatomic) LFViewController *viewController;2. 控制器 LFViewController 加载的具体流程说明:
I. 控制器LFViewController的view是延迟加载的
II.用到view时,就会调用控制器的loadView方法加载view
1> 如果nibName有值,就会加载对应的xib文件来创建view
2> 如果nibName没有值
1) 优先加载LFView.xib文件来创建view
2) 加载LFViewController.xib文件来创建view
3) 如果没有找到上面所述的xib文件,就会用代码创建一个黑色的view
页面生命周期示意图
在页面生命周期的流程图中,在viewDidDisappear的时候,有可能出现内存不足的情况,就会调用viewDidUnload方法进行内存警告处理工作,流程图如下:
只需勇敢前行,梦想自会引路,有多远,走多远,把足迹连成生命线。