補充:
NSLog(@"%s",__func__);//這句話能夠打印什麼類中的什麼方法
一 什麼是視圖控制器
(1)視圖控制器就是用來「控制」或者「管理」界面(視圖)的
控制器就是建立控件和給控件傳遞數據的
「換句話說界面長得醜與美由視圖控制器說的算」
(2)每一個視圖控制器(UIViewController)都有一個View屬性來描述界面長什麼
二 視圖控制器的建立方式
(1)UIStoryboard的方式
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
*1 獲取storyboard箭頭所指的視圖控制器
ViewController *vc = [storyboard instantiateInitialViewController];
*2 獲取storyboard標識了ID所指的視圖控制器
ViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"haha"];
(2)直接建立控制器
ViewController *vc2 =[[ViewController alloc]init];
(3)建立帶xib的視圖控制器
ViewController *vc = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
* 調用控制器的【-(instancetype)initWithNibName:bundle:】;
"【總結視圖控制器的View建立的流程】"
若是控制器是從storyboard建立,loadView從storyboard加載
若是控制器是本身建立,加載xib,沒有xib,本身建立一個空白的view
三 控制器的生命週期
(1)理解控制器的生命週期的幾個方法
*1 視圖控制器初始化的時候調用這個方法(複寫這三種方法都要父類調用)
- (id)initWithCoder:(NSCoder *)aDecoder;//建立視圖控制器
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
-(id)init;
*2當使用視圖控制器上的view的時候用這兩個方法(使用其餘的view不會調用)
loadView//視圖的自定義
注:當程序中的控件加載完畢時的時候自動調用ViewDidLoad
viewDidLoad //view加載完畢
注:view的懶加載:啥時候使用view,啥時候調用這兩個方法;(這個是把view樣式加載到內存中,viewWippAppear的目的是按照view樣式渲染到屏幕上)
*3 當視圖顯示的時候調用這個兩個方法(即開始顯示在窗口的時候開始調用 )
viewWillAppear//view即將顯示
viewDidAppear//view已經顯示
viewWillDisappear//view即將消失
viewDidDisappear//view已經消失
viewWillUnload//view即被卸載
viewDidUnload//view已經卸載
dealloc//控制器被銷燬
補充1:
若是控制器不消失的話,通常不會執行viewWillUnload,(除非內存警告)
補充2:
使用xib建立的視圖
MyView *view1 = [[[NSBundle mainBundle]loadNibNamed:@"View" owner:nil options:nil]lastObject];
#import "MyView.h"
@implementation MyView
當是視圖初始化的時候調用這個方法
-(void)awakeFromNib{
[super awakeFromNib];
NSLog(@"%s",__func__);
}
@end
生命週期方法
iOS視圖控制對象生命週期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的區別及用途
init-初始化程序app
viewDidLoad-加載視圖code
viewWillAppear-UIViewController對象的視圖即將加入窗口時調用;對象
viewDidApper-UIViewController對象的視圖已經加入到窗口時調用;生命週期
viewWillDisappear-UIViewController對象的視圖即將消失、被覆蓋或是隱藏時調用;ip
viewDidDisappear-UIViewController對象的視圖已經消失、被覆蓋或是隱藏時調用;內存
viewVillUnload-當內存太低時,須要釋放一些不須要使用的視圖時,即將釋放時調用;it
viewDidUnload-當內存太低,釋放一些不須要的視圖時調用。
視圖控制對象經過alloc和init來建立,可是
視圖控制對象不會在建立的那一刻就立刻建立相應的視圖,而是等到須要使用的時候才經過調用loadView來建立,這樣的作法能提升內存的使用率。好比,當某個標籤有不少UIViewController對象,那麼對於任何一個UIViewController對象的視圖,只有相應的標籤被選中時纔會被建立出來。