iOS 控制器的三种创建方式
控制器常见的创建方式有以下几种 通过storyboard创建 直接创建 ViewController *md = [[ViewController alloc] init]; 指定xib文件来创建(创建控制器的时候加载这个YmView的xib)
ViewController *md = [[ViewController alloc] initWithNibName:@"YmView" bundle:nil];
第一种方式:通过storyboard 创建控制器
先加载storyboard文件(Test是storyboard的文件名) UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil]; 接着初始化storyboard中的控制器
初始化“初始控制器”(箭头所指的控制器) ViewController *ym = [storyboard instantiateInitialViewController]; 通过一个标识"ym"(控制器里的storyboard ID)初始化对应的控制器 ViewController *ym = [storyboard instantiateViewControllerWithIdentifier:@”ym"];
ps:无论storyboard里面有没有箭头指向控制器,只要main interface 设置为空,程序刚启动时就不执行storyboard,去执行APP代理方法。
第二种方式:直接创建 ViewController *md = [[ViewController alloc] init];
第三种:指定xib文件来创建(创建控制器的时候加载这个YmView的xib来描述控制器的view) ViewController *md = [[ViewController alloc] initWithNibName:@"YmView" bundle:nil];
ps:需要把xib的class设置为控制器,其次把 File's Owner 的view 与xib 的view连线即可
ps:如果xib与控制器同名,或者xib为控制器名称去掉Controller比如为View.xib,在设置好上述操作后,那么[[ViewController alloc] initWithNibName:@"YmView" bundle:nil]可写为 [ViewController alloc]init];也是可以加载ViewController.xib和View.xib的。
针对上面创建Controller后的加载view情况,我们可以引用mj大神总结好的view视图创建的优先级别。如下图:
控制器的view是延迟加载的:用到时再加载 可以用isViewLoaded方法判断一个UIViewController的view是否已经被加载 控制器的view加载完毕就会调用viewDidLoad方法
/** * loadView方法是用来自定义view,比如ImageView什么的 */ - (void)loadView { self.view = [[UIView alloc] init]; self.view.backgroundColor = [UIColor purpleColor]; }