zoukankan      html  css  js  c++  java
  • iOS 控制器View的生命周期及相关函数

    1.loadView

      1.1 如果重写了控制器的loadView方法,则控制器的View按照loadView方法的描述去创建

      - (void)loadView

      {

          self.view = [[UIView alloc]init];

          self.view.backgroundColor = [UIColor redColor];

      }

      1.2 如果没重写控制器的loadView方法,则看有没有storyboard的,有的话,则按storyboard的描述创建view

        加载storyboard的方法:

        1>在project--targets--MainInterface指定storyboard

        2>代码加载   

          - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

          {

                self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

                self.window.backgroundColor = [UIColor whiteColor];

                UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];

                self.window.rootViewController = [myStoryboard instantiateInitialViewController];

                [self.window makeKeyAndVisible];

                return YES;

          }

      1.3 如果没有storyboard,则看初始化控制器的时候,有没有指定nibName,指定了的话,就按nibName对应的xib创建view

          - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

          {

                self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

                self.window.backgroundColor = [UIColor whiteColor];

                self.window.rootViewController = [[QKViewController alloc]initWithNibName:@"myViewController" bundle:nil];

                [self.window makeKeyAndVisible];

                return YES;

          }

      1.4 如果没有指定nibName,假设控制器名字是QKViewController,则程序优先寻找名字为QKView.xib,找到了的话,则按QKView.xib创建view

      1.5 如果没有找到QKView.xib,则寻找QKViewController.xib,找到了的话,则按QKViewController.xib创建view

      前面5步的流程图如下, MYViewController的View的创建过程

    2.前面5步实际都是在做loadView,做完这一步之后,就调用viewDidLoad,只会被调用一次

    3.在视图显示之前调用viewWillAppear,该函数可以被多次调用

    4.视图显示完毕,调用viewDidAppear

    5.在视图消失之前,调用viewWillDisApperar,该函数可以被多次调用

    6.在布局变化前后,调用viewWillLayoutSubviewsviewDidLayoutSubviews

    7.控制器还有三个方法需要注意:viewWillUnloadviewDidUnloaddidReceiveMemoryWarning

      当程序内存不够用时,最先拿到内存警告的是UIApplication→Window→Window.rootViewController→.....(一层一层往下传).

      控制器收到内存警告时,如果要确定要销毁View,则会调用viewWillUnloadviewDidUnload.

      控制器是这样判断View是否需要销毁的:

    8.当控制器的View被销毁之后,如果又需要显示,则控制器会调用loadView,又从第一步的loadView开始走一遍

    总结:控制器的生命周期实际是一个闭合的环

  • 相关阅读:
    js获取页面所有搜索条件
    js计算两经纬度之间的距离
    .NET MVC 序列化与反序列化
    微信浏览器内禁止页面回退返回
    Winform组合ComboBox和TreeView实现ComboTreeView
    如何在Oracle触发器中使用查询语句
    DevExpress Winform:纯代码方式创建PopupMenu
    DevExpress GridView 鼠标热点追踪 高亮显示行
    Task.Wait and “Inlining”
    重置Visual Studio 2017的配置
  • 原文地址:https://www.cnblogs.com/oumygade/p/4295042.html
Copyright © 2011-2022 走看看