zoukankan      html  css  js  c++  java
  • UIWindow

     

    UIWindow的详细介绍

            注释:iOS程序启动完毕后,创建的第一个视图控件就是UIWindow(和第一个对象区别开来)

     
     
     
    窗口的创建过程
     
     
     
     
    展现一个空项目搭建一个程序  
     
         目的:展现程序运行过程
     
     
     
     
    在storyboard没有的情况下创建项目,这样创建有许多代码
     
     
     
     
    这个window就是应用所在的window
     
     
     
     
     
     
    在代理对象的实现类中实现协议的方法,来完整写出window的创建过程,创建/显示
     
     
    正常显示
     
    一注释,一片漆黑
     
     
     
     
     
     

    添加UIView到UIWindow中两种常见方式:

     
     
     
     
     
     
    设置控制器的UIView颜色是蓝色
     
     
     
     
     
    第一种:- (void)addSubview:(UIView *)view;直接将view添加到UIWindow中,但并不会理会view对应的UIViewController
     
     
     
     
    弊端:这个方法一调用完,就释放控制器,导致只剩下view,那控制器上监听的按钮是不是一点击就崩溃了
     
     
     

    第二种:@property(nonatomic,retain) UIViewController *rootViewController;自动将rootViewController的view添加到UIWindow中,负责管理rootViewController的生命周期

     
    只要将控制器的设置成窗口的根控制器就会显示one控制器的view 
     
     
     
     
         你看也能显示,没有主动添加view到window上也能显示
     
     
     
     
    控制器只是起到辅助作用,没有控制器也能显示控件到window上,但一个应用肯定有很多界面,一个window显示是不现实的
     
     
    开发中只能用第二种,第一种各种弊端:野指针,控制器指针因为已经释放了;第二种不会
     
     
     
    演示第一种和第二种的区别
     
     
             加个开关
     
     
    第一种内容没换过来
     
     
    第二个方法就旋转过来了
     
     
     

     旋转事件 --> UIApplication --> UIWindow  —rootViewController   旋转由控制器控制

         不同界面就是将不同的控制器设置成根控制器就好了,这部分总结就是window是最牛的,必须用第二种方法

     
    05- UIWindow补充

    加载storyboard的实质

           窗口创建过程的代替,以前storyboard的创建方式就是自动生成创建window的代码,并将箭头所指的控制器变成跟控制器

        就是代替上面的代码(storyboard对应的就是一个控制器啊),如果把主要的storyboard的删掉,就不会显示了,因为不会加

    载storyboard箭头所指的控制器,也不会创建window。

    下面苹果官方文档storyboard的创建过程

           

    makeKeyAndVisible方法的实质底层语句

     
     
     
     
     
     
     
     
     
     
    现在window2是主窗口
     
     
     
     
     
     
    ios6下非主窗口,写不了
     
    ————
     
    主窗口获取,一开始是window,后来是window2,所以只有一个主窗口
     
     
     
    ————————
     
    你会发现键盘也在一个window上,以后要改键盘上的东西,要首先拿到这个window
     
     
     
     
  • 相关阅读:
    《Docker Deep Dive》Note
    使用 Angular RouteReuseStrategy 缓存(路由)组件
    我的 VSCode 配置
    TCP/IP协议
    Fiddler代理手机抓包
    基于 Docker 和 GitLab 的前端自动化部署实践笔记
    Vue.js 2.x render 渲染函数 & JSX
    服务器免密登陆脚本
    gitlab+jenkins+pm2+rsync实现node的自动化部署
    nginx常用
  • 原文地址:https://www.cnblogs.com/kongweiiwei/p/4654785.html
Copyright © 2011-2022 走看看