转自:http://www.maxiaoguo.com/clothes/249.html
首先说下ios 程序的加载过程
首先会调用main.h 来启动一系列东西,然后调用AppDelegate 文件,MJAppDelegate 加载的时候会调用 didFinishLaunchingWithOptions方法,此方法 用来查找window显示在手机屏幕上的,显示的时候实际上是从window中获取的 Controller,当自定义Controller的时候 就需要塞到self.window.rootViewController 中
MJAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// UIStoryboard *story = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
// self.window.rootViewController = [story instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
// 这行代码仅仅是创建控制器
MJOneViewController *one = [[MJOneViewController alloc] init];
// one.view.backgroundColor = [UIColor redColor];
// 设置窗口的根控制器
self.window.rootViewController = one;
// one.view.backgroundColor = [UIColor blueColor];
// 显示窗口
[self.window makeKeyAndVisible];
return YES;
}
自定义控制器有两种方法。
一种是 通过加载xib来获取view,另一种是 通过代码来 创建view
第一种 ,创建的时候选择生成xib
在ViewController的生命周期的中的 viewDidLoad 方法中创建
/**
* 自定义view
*/
- (void)loadView
{
self.view = [[UIImageView alloc] init];
self.view.backgroundColor = [UIColor greenColor];
}
ViewController 的生命周期 初始化
viewcontroller的加载规则
程序请求controller的view
如果view在内存中,则直接加载。相反,如果不存在,则UIViewController调用loadView方法
loadView方法执行如下操作:
如果你重载了这个方法,则必须创建必要的view并且将一个非nil值传给UIViewController的view属性。
如果你没有重载这个函数,UIViewController会默认使用UIViewController的nibName和nibBundle属性尝试从nib文件加载view。如果没有找到nib文件,则ViewController会通过以下两个步骤找到与其关联的nib。
A 如果类名包含Controller,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;
B 找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib。
如果没有可用的nib文件,那么它创建一个空的UIView作为它的view。
加载view的机制
UIviewController的生命周期