當建立完控制器,須要加載控制器的view時,蘋果默認的作法是去加載storyboard的view,要自定義控制器的view,就須要重寫控制器的loadView方法,這個方法的做用就是自定義控制器view,若是重寫了這個方法,就不會去加載storyboard描述的控制器的View。
spa
通常重寫某個方法時,咱們會先調用[super xxx]方法,好比當咱們重寫loadView方法時,會先調用[super loadView]方法,可是在控制器這裏的super是指的UIViewController,也就是說調用系統默認的作法,去加載storyboard的view,然而這並非咱們自定義view想要的,因此在這裏不能調用[super loadView],因此,一旦重寫loadView方法,就不要[super loadView]。須要注意的是,在laodView方法中,若是沒有自定義的view,那麼就沒法獲取控制器的view了,因此在這個方法中,不能使用self.view,不然會死循環。loadView方法何時調用?當第一次使用控制器view的時候調用。也就是調用view的getter方法時。code
- (UIView *)view{ if (_view == nil) { [self loadView]; [self viewDidLoad]; } return _view; }
這是一種自定義控制器view的方式。另一種就是使用xib。get
UIViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
只要經過initWithNibName:bundle:初始化控制器,而且nibName爲nil時,就會執行如下幾步:it
1.尋找有沒有跟控制器類名同名可是不帶Controller的xib,若是有就會去加載。(優先級最高)class
2.尋找有沒有跟控制器類名同名的xib,若是有就會去加載循環
3.若是都沒有找到,建立空的view。方法
xib描述了控制器的view以後,也是默認經過loadView方法去加載view的。view
控制器view懶加載:storyboard
控制器的view並非建立完控制器後去加載的,而是當第一次使用view時纔會去加載。
vi