View懒加载

在公司没事情,写了下昨天看教程的截图代码,发现了输出的图片不一样。然后困惑了挺久,后来才发现以前看过,View的懒加载

AppDelegate.m[UIApplication代理]

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

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    ViewController *vc = [[ViewController alloc] init];
    // 这里的用到view,会对view进行加载,即执行viewDidLoad
    vc.view.backgroundColor = [UIColor greenColor];
    self.window.rootViewController = vc;

    [self.window makeKeyAndVisible];

    return YES;
}

ViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];


    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 100, 100)];
    view.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:view];

    UIGraphicsBeginImageContext(self.view.bounds.size);
    CGContextRef ctf = UIGraphicsGetCurrentContext();
    // 执行截图
    [self.view.layer renderInContext:ctf];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    NSData *data = UIImagePNGRepresentation(image);

    [data writeToFile:@"/Users/songruiwang/Desktop/a.png" atomically:YES];
}

模拟器:
View懒加载_第1张图片

a.png:
View懒加载_第2张图片

两个的view背景色不一样。
原因:

vc.view.backgroundColor = [UIColor greenColor];

这句代码执行vc.view.backgroundColor时,会对view进行加载,即执行viewDidLoad,所以执行截图时,根控制器的view背景颜色并没有被设置成绿色,所以截图存的文件无背景色。当执行完viewDidLoad后,再赋值view的背景颜色,所以模拟器显示出来的是绿色。

你可能感兴趣的:(View懒加载)