通过StoryBoard加载控制器&通过Xib加载控制器

通过StoryBoard加载控制器&通过Xib加载控制器
通过StoryBoard加载控制器
- (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;
}
复制代码
通过StoryBoard加载控制器&通过Xib加载控制器
- (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方法
//loadView作用,用来创建控制器的View.
//什么时候调用:当控制器的View,第一次使用的时候调用.

//loadView底层原理:
//1.先判断当前控制器是不是从storyBoard当中加载的,如果是从storyBoard加载的控制器.那么它就会从storyBoard当中加载的控制器的View,设置当前控制器的view.
//2.当前控制器是不是从xib当中加载的,如果是从xib当中加载的话,把xib当中指定的View,设置为当前控制器的View.
//3.如果也不是从xib加载的,它会创建空白的view.

//****一但重写了loadView方法,就说明要自己定义View.***

//一般使用的场景:
//当控制器的View一显示时,就是一张图片,或者UIWebView.
//节省内存
复制代码

讲解节省内存原因

- (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对象,节省了内存。

-(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或者hidden

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值