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];
}

   

posted @ 2016-01-28 09:39  欲眠  阅读(341)  评论(0编辑  收藏  举报