zoukankan      html  css  js  c++  java
  • keyWindow与delegate中Window的区别

    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
  • 相关阅读:
    用外部表的方式查询当天数据库alert日志文件
    比较数据泵和exp/imp对相同数据导出/导入的性能差异
    理解Oracle TM和TX锁
    Rocky4.2下安装金仓v7数据库(KingbaseES)
    理解listagg函数
    sql*loader的直接加载方式和传统加载方式的性能差异
    Rocky4.2下安装达梦(DM)6数据库
    演示对sys用户和普通用户进行审计的示例
    演示一个通过触发器进行审计的示例
    演示一个使用db vault进行安全控制的示例
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4049701.html
Copyright © 2011-2022 走看看