1.2 控制器 view 的建立和載入,1.2view
載入優先順序:
- 1、用系統的loadView方法建立控制器的視圖
- 2、如果指定載入某個storyboard檔案做控制器的視圖,就會載入storyboard裡面的描述去建立view
- 3、如果指定讀取某個xib檔案做控制器的視圖,就根據指定的xib檔案去載入建立
- 4、如果有xib檔案名稱和控制器的類名首碼(也就是去掉controller)的名字一樣的 xib檔案,就會用這個xib檔案來建立控制項器的視圖 【例:控制項器的名為 TDViewController, xib檔案名稱為 TDView.xib】
- 5、找和控制器同名的xib檔案去建立
- 6、如果以上都沒有就建立一個空的控制項器的視圖;
|
控制器view的消極式載入:
- 控制器的view是消極式載入(懶載入)的:用到時再載入
- 控制器的view載入完畢(先載入loadView),再去 調用viewDidLoad方法
- 用isViewLoaded方法判斷UIViewController的view是否已經被載入
|
圖解:
代碼驗證:
1 #import "AppDelegate.h" 2 #import "TDViewController.h" 3 4 @interface AppDelegate () 5 @end 6 7 @implementation AppDelegate 8 9 - (BOOL)application:(UIApplication *)application10 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {11 12 // 建立window13 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];14 15 // 1.沒有同名xib情況下(不用sb 和 xib) alloc init16 // 結論:透明的view17 TDViewController *vc = [[TDViewController alloc] init];18 19 // 2.通過 storyboard 建立20 // 結論:View預設是白色(因為sb拖控制器的時候 就是白色),和指定sb的描述是一致的21 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Test" bundle:nil];22 TDViewController *vc = [sb instantiateInitialViewController];23 24 // 3.有指定xib情況下建立25 // 結論:view和指定xib的描述是一致的26 TDViewController *vc =27 [[TDViewController alloc] initWithNibName:@"TD" bundle:nil];28 29 // 4.有同名xib情況30 // 結論:如果有同名的話,會有優先載入同名的 xib, 因此不需要 initWithNibName31 TDViewController* vc = [[TDViewController alloc] init];32 33 // 5.有同名去掉controller的情況34 // 結論:如果有同名去掉controller的情況,優先順序 會比 同名高35 TDViewController *vc = [[TDViewController alloc] init];36 37 self.window.rootViewController = vc;// 設定跟控制器38 [self.window makeKeyAndVisible];// 顯示39 40 return YES;41 }
1 #import "TDViewController.h" 2 3 @interface TDViewController () 4 @end 5 6 @implementation TDViewController 7 8 - (void)viewDidLoad { 9 [super viewDidLoad];10 }11 12 - (void)didReceiveMemoryWarning {13 [super didReceiveMemoryWarning];14 }15 16 // 6.loadView 此方法用來重寫vc的view17 // 結論:比其他(xib sb 代碼)的優先順序都要高18 - (void)loadView {19 self.view = [[UIView alloc] init];20 self.view.backgroundColor = [UIColor purpleColor];21 NSLog(@"loadView");22 }23 24 @end
控制器view的載入
loadView方法僅在用代碼建立視圖控制器的介面時使用在loadView方法中根據實際需求來確定到底是否需要調用[super loadView]
Screen & Window & View Controller的關係
記憶體警告處理
如果你覺得本篇文章對你有所協助,請點擊右下部“推薦”,^_^
作者:藍田(Loto)
出處:http://www.cnblogs.com/shorfng/
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連。
如有疑問,請發送郵件至 shorfng@126.com 聯絡我。
By:藍田(Loto)