- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//1.建立窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//2.設置窗口的根控制器
//經過StoryBoard加載控制器.
//2.1建立storyBoard對象
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"One" bundle:nil];
//2.2.加載storyBoard箭頭指向的控制器
UIViewController *vc = [storyBoard instantiateInitialViewController];
//2.3.加載指定的控制器
//UIViewController *vc = [storyBoard instantiateViewControllerWithIdentifier:@"VC"];
self.window.rootViewController = vc;
//3.顯示窗口
[self.window makeKeyAndVisible];
return YES;
}
複製代碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//1.建立窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//2.設置窗口根控制器
//2.1經過xib加載控制器的View
//initWithNibName:若是指定了特定的名稱的xib,會去加載指定的xib
//若是指定是nil
//1.判斷有沒有當前控制器相同名稱的xib,若是有,自動加載跟它相同名稱的xib(XMGViewController.xib)
//2.若是沒有跟它相同名稱的xib.自動加載跟它相同名稱而且是去掉controller(XMGView.xib)
//init底層自動調用initWithNibName.
//XMGViewController *vc = [[XMGViewController alloc] init];
//vc.view.backgroundColor = [UIColor redColor];
TwoViewController *vc = [[TwoViewController alloc] init];
self.window.rootViewController = vc;
//3.顯示窗口
[self.window makeKeyAndVisible];
return YES;
}
複製代碼
//loadView做用,用來建立控制器的View.
//何時調用:當控制器的View,第一次使用的時候調用.
//loadView底層原理:
//1.先判斷當前控制器是否是從storyBoard當中加載的,若是是從storyBoard加載的控制器.那麼它就會從storyBoard當中加載的控制器的View,設置當前控制器的view.
//2.當前控制器是否是從xib當中加載的,若是是從xib當中加載的話,把xib當中指定的View,設置爲當前控制器的View.
//3.若是也不是從xib加載的,它會建立空白的view.
//****一但重寫了loadView方法,就說明要本身定義View.***
//通常使用的場景:
//當控制器的View一顯示時,就是一張圖片,或者UIWebView.
//節省內存
複製代碼
講解節省內存緣由bash
- (void)viewDidLoad {
[super viewDidLoad];
//若是沒有重寫loadView方法,那麼執行到這裏時候,LoadView已經建立了一個空白的View,
UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"火影"]];
//將loadView建立的空白的view,即self.view,添加子view--imageV,此過程建立了兩個view已經。
[self.view addSubview:imageV];
NSLog(@"%@",self.view);
UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
btn.frame = CGRectMake(50, 40, 50, 50);
[self.view addSubview:btn];
}
複製代碼
上述問題解決辦法,重寫loadView,直接建立一個ImageV爲控制器View,便可只建立了一個view對象,節省了內存。app
-(void)loadView{
// XMGView *xmgV = [[XMGView alloc] initWithFrame:[UIScreen mainScreen].bounds];
// self.view = xmgV;
//若是一個控件不可以接收事件,那麼它裏面子控件也是能不可以接收事件
UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"火影"]];
imageV.userInteractionEnabled = YES;
self.view = imageV;
}
//view懶加載,view getter方法調用loadView
//-(UIView *)view{
// if (_view == nil) {
// [self loadView];
// }
// return _view
//}
複製代碼
//視圖控制器中的視圖加載完成,viewController自帶的view加載完成
- (void)viewDidLoad {
NSLog(@"%s", __FUNCTION__);
[super viewDidLoad];
}
複製代碼
初始化的控制器view是透明的,這裏透明指的是clearColor,而不是Alpha = 0或者hiddenui