UIWindow的rootViewController的问题

1,214 阅读1分钟

在创建一个新的project后,在ViewController中添加如下代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.view.backgroundColor = [UIColor redColor];
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 100, 100)];
    view.backgroundColor = [UIColor brownColor];
    [[UIApplication sharedApplication].delegate.window addSubview:view];
    [[UIApplication sharedApplication].delegate.window bringSubviewToFront:view];
}

理所当然的认为,在当前屏幕上会是棕色的View盖在红色ViewController上面。可是到了运行的时候发现屏幕就显示了一个红色的View。

红色View

棕色的View没添加到?不太可能,程序也能运行到这里

window是nil?更加不可能,为nil的话还怎么添加ViewController

打开层次视图的时候,会发现其实棕色的view是被盖住了:

层次视图

但是如果为这个ViewController添加一个Nav什么的,运行又是预想中的效果。

于是乎只能猜测,当单个ViewController作为rootViewController时,首先会先执行viewDidLoad方法,将整个View加载完毕后,才会添加到window上面。