源码03-02-09-控制器View懒加载

//
//  AppDelegate.m
//  09-控制器View懒加载
#import "AppDelegate.h"
#import "ViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // 创建窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    // 创建UIViewController控制器,控制器的view并没有创建
    // 控制器的view懒加载:第一次使用的时候才会去加载,并不是创建UIViewController控制器的时候去加载
    UIViewController *vc = [[ViewController alloc] init];
    vc.view.backgroundColor = [UIColor redColor];

    self.window.rootViewController = vc;

    // 显示窗口
    [self.window makeKeyAndVisible];

    return YES;
}

#pragma mark - 控制器view的默认颜色
- (void)vcViewBackground
{
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    self.window.backgroundColor = [UIColor redColor];

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
    btn.center = CGPointMake(20, 100);
    [self.window addSubview:btn];

    // 默认控制器的view:几乎透明
    UIViewController *vc = [[UIViewController alloc] init];
    vc.view.backgroundColor = [UIColor clearColor];

    //    vc.view.alpha = 0;
    //    vc.view.backgroundColor = [UIColor yellowColor];
    self.window.rootViewController = vc;

    [self.window makeKeyAndVisible];

}
@end
//
//  ViewController.m
//  09-控制器View懒加载
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
- (void)loadView
{
    // 如果控制器是窗口的根控制器就可以不用设置尺寸
    self.view = [[UIView alloc] initWithFrame:CGRectZero];

    self.view.backgroundColor = [UIColor yellowColor];

}
//- (UIView *)view
//{
//    if (_view == nil) {
//        [self loadView];
//        [self viewDidLoad];
//    }
//    return _view;
//}
// 在viewDidLoad中打印控制器的尺寸不准确,通常在viewDidAppear
// 控制器的view加载完成的时候调用
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor = [UIColor blueColor];

    NSLog(@"%s",__func__);
}

#pragma mark - view完全显示的时候调用
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    NSLog(@"%@",NSStringFromCGRect(self.view.bounds));

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

时间: 2024-10-15 03:19:29

源码03-02-09-控制器View懒加载的相关文章

iOS之控制器View的加载

首先我们得知道,控制器view是通过懒加载的方式进行加载的,即用到的时候再加载.loadView有什么作用,它与viewDidLoad有何区别. loadView方法 当我们用到控制器view时,就会调用控制器view的get方法,在get方法内部,首先判断view是否已经创建,如果已存在,则直接返回存在的view,如果不存在,则调用控制器的loadView方法,在控制器没有被销毁的情况下,loadView也可能会被执行多次 viewDidLoad方法 当控制器的loadView方法执行完毕,v

WorldWind源码剖析系列:星球球体的加载与渲染

WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()依次作以下几个事情: 1.  使用System.Version在内部,读取软件版本信息,并格式化输出.我们在外面配置软件版本,“关于”部分中版本自动更改. 获取格式化版本号 // Establish the version number string used for user display, // such as the Splash and 

控制器View的加载过程

1.控制器内部的view是延迟加载 1> 用到时再加载2> 加载完毕后会调用控制器的viewDidLoad方法 2.创建控制器的方式 1> 直接通过代码创建OneViewController *one = [[OneViewController alloc] init]; 如果调用init方法创建控制器(TwoViewController),那么在加载控制器view的时候: a.优先查找 “TwoView.xib” b.其次再查找 同名 的xib 文件 “TwoViewControlle

iOS之深入了解控制器View的加载

在面试中,面试官可能会问这样的问题,loadView有什么作用,它与viewDidLoad有何区别 首先我们得知道,控制器view是通过懒加载的方式进行加载的,即用到的时候再加载. loadView方法 当我们用到控制器view时,就会调用控制器view的get方法,在get方法内部,首先判断view是否已经创建,如果已存在,则直接返回存在的view,如果不存在,则调用控制器的loadView方法,在控制器没有被销毁的情况下,loadView也可能会被执行多次 viewDidLoad方法 当控制

android源码解析(十七)-->Activity布局加载流程

好吧,终于要开始讲讲Activity的布局加载流程了,大家都知道在Android体系中Activity扮演了一个界面展示的角色,这也是它与android中另外一个很重要的组件Service最大的不同,但是这个展示的界面的功能是Activity直接控制的么?界面的布局文件是如何加载到内存并被Activity管理的?android中的View是一个怎样的概念?加载到内存中的布局文件是如何绘制出来的? 要想回答这些问题,我们就需要对android的界面加载与绘制流程有所了解,这里我们先来学习一下Act

android源码解析(十九)-->Dialog加载绘制流程

前面两篇文章,我们分析了Activity的布局文件加载.绘制流程,算是对整个Android系统中界面的显示流程有了一个大概的了解,其实Android系统中所有的显示控件(注意这里是控件,而不是组件)的加载绘制流程都是类似的,包括:Dialog的加载绘制流程,PopupWindow的加载绘制流程,Toast的显示原理等,上一篇文章中,我说在介绍了Activity界面的加载绘制流程之后,就会分析一下剩余几个控件的显示控制流程,这里我打算先分析一下Dialog的加载绘制流程. 可能有的同学问这里为什么

android源码解析(二十一)-->PopupWindow加载绘制流程

在前面的几篇文章中我们分析了Activity与Dialog的加载绘制流程,取消绘制流程,相信大家对Android系统的窗口绘制机制有了一个感性的认识了,这篇文章我们将继续分析一下PopupWindow加载绘制流程. 在分析PopupWindow之前,我们将首先说一下什么是PopupWindow?理解一个类最好的方式就是看一下这个类的定义,这里我们摘要了一下Android系统中PopupWindow的类的说明: A popup window that can be used to display

UIKit框架(6)控制器view的加载方式

本篇文章,总结控制器管理的view是如何创建而来的,以及Xcode对控制器view创建的隐含规则 创建方式 方式一:alloc+init方式,空白view 应当在控制器的viewDidLoad方法中添加要对view进行的各种操作 方式二:alloc+initWithNib方式,即view是由xib设计的 方式三:从UIStoryboard对象加载的,即view是由storyboard设计的 方式四:重写控制器的loadView方法,该方法内进行创建view 如: - (void)loadView

CI框架源码阅读笔记9 CI的自动加载机制autoload

本篇并不是对某一组件的详细源码分析,而只是简单的跟踪了下CI的autoload的基本流程.因此,可以看做是Loader组件的分析前提. CI框架中,允许你配置autoload数组,这样,在你的应用程序初始化时,会自动加载相应的类库,例如,在application/config/autoload.php中,autoload的配置如下: $autoload['libraries'] = array("smarty", "redis"); 则CI框架初始化时,会自动加载l