keyWindow與delegate中Window的區別
源碼:
// // ViewController.m // UIWindowRelated // // Created by YouXianMing on 14/10/25. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"-------"); NSLog(@"%@", [UIApplication sharedApplication].keyWindow); NSLog(@"%@", [[[UIApplication sharedApplication] delegate] window]); } - (void)viewDidAppear:(BOOL)animated { NSLog(@"#######"); NSLog(@"%@", [UIApplication sharedApplication].keyWindow); NSLog(@"%@", [[[UIApplication sharedApplication] delegate] window]); } @end
結果如下圖:
從打印結果中可以知道:
keyWindow與delegate中的window其實是一樣的,keyWindow的存在的意義,其實就是為了說明當前的window接管了這個控制器的view而已,你可以在keyWindow上加載你自己的建立的view了。
現在提供一個便利的類目^_^:
// // UIWindow+Window.h // Window // // Created by YouXianMing on 14-10-10. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <UIKit/UIKit.h> @interface UIWindow (Window) /** * 返回keyWindow(如果keyWindow有值,代表着你可以給window添加view了) * * @return 可以添加view並顯示出來的window(如果返回為nil,說明你不能將view添加到window上去顯示) */ + (UIWindow *)usableWindow; /** * 返回window * * @return window(你給這個window添加的view很有可能被控制器的view覆蓋而顯示不了) */ + (UIWindow *)rootWindow; @end
// // UIWindow+Window.m // Window // // Created by YouXianMing on 14-10-10. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "UIWindow+Window.h" @implementation UIWindow (Window) + (UIWindow *)usableWindow { return [UIApplication sharedApplication].keyWindow; } + (UIWindow *)rootWindow { return [[[UIApplication sharedApplication] delegate] window]; } @end