1.簡單介紹
源碼:
// 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
結果如下圖:
250915205435604.png
從打印結果中可以知道:
keyWindow與delegate中的window其實是一樣的,keyWindow的存在的意義,其實就是為了說明當前的window接管了這個控制器的view而已,你可以在keyWindow上加載你自己的建立的view了。
2. 重點分析
現在提供一個便利的類目_:
// UIWindow+Window.h
// Window
#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
#import "UIWindow+Window.h"
@implementation UIWindow (Window)
+ (UIWindow *)usableWindow
{
return [UIApplication sharedApplication].keyWindow;
}
+ (UIWindow *)rootWindow
{
return [[[UIApplication sharedApplication] delegate] window];
}
@end