- (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