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步的流程图:

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

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

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

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

6.在布局变化前后,调用viewWillLayoutSubviews\viewDidLayoutSubviews

7.控制器还有三个方法需要注意:viewWillUnload\viewDidUnload\didReceiveMemoryWarning

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

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

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

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

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

时间: 2024-12-15 03:16:19

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

创建控制器、控制器加载view过程、控制器view的生命周期、多控制器

在介绍四大对象的那篇博客中,可以基本了解到程序启动的过程: main-->UIApplicationMain-->创建UIApplication的实例和app代理AppDelegate的实例并设置好代理--->在程序启动后,也就是启动画面显示之后, AppDelegate创建UIWindow(可以是自动创建的,也可以手动创建) 现在讨论的问题是,如何创建控制器并设置为UIWindow的根控制器,然后加载出控制器中的view并显示出来. 本文目录 1.创建控制器的三种方式 2.控制器的vi

UIApplication代理、控制器view的生命周期

//应用程序启动完毕时调用 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"%s",__func__); return YES; } //应用程序将要失去焦点时调用 - (void)applicationWillResignActive:(UIApplication *)application {

ios中view的生命周期

IOS视图控制器导航及生命周期研究Demo

1.背景: 2014年4月份第一次接触IOS端开发,为某银行开发一款金融app.在开发的最后阶段,加入了需要从任意一个页面直接返回主页的功能.悲催的是,当时没有使用UINavigationController进行导航管理,而是使用了IOS中的模态跳转方式(presentViewController/dismissViewControllerAnimated). 因此需要找的一种方法进行,实现如下方式的导航跳转: 已知: 页面a→页面b→页面c 求解: 页面c直接跳回到页面a,并且要求不能有内存泄

iOS:viewController 和 view 的生命周期

一.介绍: viwe和viewController的生命周期是最基本的知识,如果很好地理解它们的方法调用的执行顺序,就能很好地掌握代码优秀的风格.这篇博客写的不错:http://www.cnblogs.com/peaceWang/p/5346726.html,有时间我会在此基础上完善,具体讲述一下每一个方法中最适合执行的操作. 控制器创建的生命周期 1. 如果从stroryBoard 中产生一个controller,那么会先调用initWithCoder:, awakeFromNib, load

0517.View、ViewController的生命周期及相关函数的用途[UIKit]

准备知识(来自网易博友:烟花细雨): 1.按照结构可以把ViewController分为2类: 1)主要是用于显示内容的ViewController,这种ViewController主要是用于为用户展示内容,并且与用户交互,比如UITableViewCOntroller,UIVewController 2)永固控制和显示其他ViewController的ViewController,这种ViewController一般都是一个ViewCOntroller的容器.比如UINavigationCon

iOS学习笔记—ViewController/生命周期

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController).导航控制器(UINavigationController).标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等. 按结构可以对iOS的所有ViewCo

iOS学习笔记-ViewController/生命周期

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController).导航控制器(UINavigationController).标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等. 按结构可以对iOS的所有ViewCo

【iOS】UIViewController的生命周期

UIViewController中存在的2个循环: 在UIViewController中,View存在两个循环:加载循环和卸载循环. 加载循环 1>程序请求controller的view. 2>如果view在内存中,则直接加载.相反,如果不存在,则UIViewController调用loadView方法. 3>loadView方法执行如下操作: 如果你重载了这个方法,则必须创建必要的view并且将一个非nil值传给UIViewController的view属性. 如果你没有重载这个函数,