iOS 控制器View的生命周期及相关函数

摘要:
然后,根据loadView方法的描述创建控制器的视图-(void)loadView{self.view=[[UIViewalloc]init];nil];根据与nibName-(BOOL)应用程序对应的xib创建视图:nil],调用viewWillLayoutSubviewsviewDidLayoutSubviews7。控制器有三种方法需要注意:

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的创建过程

iOS 控制器View的生命周期及相关函数第1张

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

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

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

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

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

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

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

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

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

iOS 控制器View的生命周期及相关函数第2张

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

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

iOS 控制器View的生命周期及相关函数第3张

免责声明:文章转载自《iOS 控制器View的生命周期及相关函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Icinga快速安装与配置一种基于自定义代码的asp.net网站首页根据IP自动跳转指定页面的方法!下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ECNUOJ 2147 字符环

字符环 Time Limit:1000MS Memory Limit:65536KBTotal Submit:562 Accepted:146 Description 字符环:就是将给定的一个字符串,首尾相连而形成的一个环。现在我们来玩一个有趣的两人游戏:每次甲给出两个字符串A和B,然后让乙判断字符串B是否能够被字符环A所包含.例如,A = aabcd ,...

HTML超链接中文乱码

Vm中一个超链接URL需要拼接中文作为Get请求的参数。如果直接拼接,传到后台Action的参数对象中后取出会是乱码,需要编码后再拼接到URL上。  解决方法是在Action中添加一个成员变量,保存编码后的中文参数。在vm页面渲染时取出这个变量值,再拼接超链接。 在这里碰到的问题是:调用java.net.URLEncoder的encode()方法时,如...

黑鹰破解笔记(2)

一、概论 壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种UPX ASPCAK TELOCK PELITE NSPACK ...ARMADILLO ASPROTECT ACPROTECT EPE SVKP ...顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。当然加密壳的保护能力要强得多!...

Java Web 面试中关于Spring MVC必问题,不看血亏!

前言 Spring MVC是Spring构建在Servlet API上的Web框架。目前大部分的Java Web 开发已经使用Spring MVC 来做。它提供了模型 - 视图 - 控制器架构,可用于开发灵活的Web应用程序。在本教程中,我们将重点关注与之相关的问题,因为它通常是Spring开发人员面试的主题。 为什么选择Spring MVC Spring...

阅读glibc源码

GNU C - Using GNU GCC __attribute__ mechanism 01  近来阅读glibc源码的时候遇到很多关于__attribute__的问题,索性就查找了相关的资料,学习了一下. 要是不解决了这个问题,有的时候还真的是比较难下手.就拿glibc来说,使用xcscope搜索POSIX pthread 函数: pthread...

ActivityManager

android.app.ActivityManager 这个类主要用来管理全部设备上的Activities。 权限:android.permission.GET_TASKS 方法:| 返回类型     方法| 1.List<ActivityManager.RecentTaskInfo>       getRecentTasks(int max...