1.创建控制器的三种方式:
1 MyViewController *myvc = [[MyViewController alloc] init]; 2 self.window.rootViewController = myvc;
1 MyStoryboard *storyboard = [MyStoryboard storyboardWithName:@"myBoard" bundle:nil]; 2 MyViewController *myvc = [storyboard instantiateViewControllerWithIdentifier:@"myController"]; 3 self.window.rootViewController = myvc;
1 MyViewController *myvc = [[MyViewController alloc] initWithNibName:@"MyNib" bundle:nil]; 2 self.window.rootViewController = myvc;
2.程序启动时会去寻找Main Interface,如果找到Main Interface则会自动加载默认的storyboard,加载的过程大致为以下几步:
3.storyboard加载后使用instantiateViewControllerWithIdentifier:@"storyboardId"方法也可以获得storyboard的ViewController对象。
4.同样可以使用alloc init创建控制器对象然后设置为根控制器的方式来显示页面,但是添加控件就必须使用代码了。
5.storyboard需要主动加载,即使storyboard设置为MyViewController,如果通过alloc init创建ViewController而不是通过加载storyboard,那么storyboard(包括其中的控件)不会自动进行加载。
6.下图为参考,如果MyViewController实现了loadView方法,则会执行loadView中的方法而不去加载storyboard或者xib文件(在加载文件之前),如果没有实现,再去寻找storyboard或者与nibName对应的xib,找不到nibName的时候会先去找与控制器类名去除Controller后相同文件名的xib文件,如果还未找到则找与控制器类名完全相同的xib文件。
7.在调用[self.window makeKeyAndVisible]方法的时候会因为要显示window,然后会调用window的根控制器,然后调用根控制器的view,因为是懒加载,如果之前设置了myvc.view的某些属性,则当时就会立即去绘制view,成功绘制出View后会调用viewDidLoad方法(此过程中只会调用一次)。另一张图可能会更加清楚些,不过下图忽略了xib。
8.通过使用UINavigationController的pushViewController方法可以做到界面的跳转,最后push进去的则最先显示。(用栈来说的话,就是出栈,销毁栈顶的控制器以及View,显示新栈顶的View)
9.四种方法实现给NavigationContoller添加子控件:
10.进栈与出栈的方法
1 // 使用push方法能让某个控制器进栈 2 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; 3 4 // 使用pop方法可以出栈 5 6 // 将栈顶的控制器移除 7 - (UIViewController *)popViewControllerAnimated:(BOOL)animated; 8 9 // 回到指定的子控制器 10 - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; 11 12 // 回到根控制器(栈底控制器) 13 - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;进栈和出栈
11.栈顶ViewController的navigationBar返回按钮是由次栈顶的ViewController中的backBarButtonItem决定的。只要对次栈顶的BackBarButtonItem进行赋值UIBarButtonItem就可以修改返回键的标题。
12.控制器的View默认是占满整个屏幕的。
13.通过拖线设置navigationController的rootViewController属性可以设置根控制器。
14.storyboard直接拖NavigationCotroller,然后通过拖线连接的方式连接ViewController,segue选择push。(在IOS7的时候还是能选择push,但是在ios8的时候,xcode6.1.1版本上push已经变成了不建议使用,有新的名为show的方法可以替代,起到同样效果,暂时不知道有什么优点)
15.观察控制器生命周期的方法:
// MyController1 viewDidLoad // MyController1 viewWillAppear // MyController1 viewDidAppear // MyController2 viewDidLoad // MyController1 viewWillDisAppear // MyController2 viewWillAppear // MyController1 viewDidDisAppear // Mycontroller2 viewDidAppear生命周期部分打印结果
16.生命周期参考图:
17.内存警告处理参考图:
刚开始写没几天,只是对我每天所学知识的一个记录,写的很乱,如果有错还望指正。
/!-- 灰色表示以后研究。--/