zoukankan      html  css  js  c++  java
  • 视图加载生命周期

    装载过程的函数调用顺序为:
    initWithNibName:bundle/initWithCoder -> loadview -> viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidlLayoutSubviews -> viewDiaAppear


    下面具体释义一下各函数的作用
    1、initWithNibName:bundle 

    初始化UIViewController,执行关键数据初始化操作,注意这里不要做view相关操作,view在loadView方法中才初始化,这时loadView还未调用,为nil;

    如果是通过调用initWithNibName:bundle指定nib文件名初始化的话,ViewController会根据此nib来创建View;如果name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib:(1)如果ViewController的类名以“Controller”结尾,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;(2)找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib



    2、loadview 
    当访问UIViewController的view属性时,view如果此时是nil,那么VC会自动调用loadView方法来初始化一个UIView并赋值给view属性;此方法用在初始化关键view,需要注意的是,在view初始化之前,不能先调用view的getter方法,否则将导致死循环(除非先调用了[super loadView];;如果没有重载loadView方法,则UIViewController会从nib或StoryBoard中查找默认的loadView,默认的loadView会返回一个空白的UIView对象。


    3、viewDidLoad 
    当VC的view对象载入内存后调用,用于对view进行额外的初始化操作。


    4、viewWillAppear
    在view即将添加到视图层级中(显示给用户)且任意显示动画切换之前调用(这个时候视图层级View还是nil)。这个方法中完成任何与视图显示相关的任务,例如改变视图方向、状态栏方向、视图显示样式等。


    5、viewDidAppear
    在view被添加到视图层级中,显示动画切换之后调用(这时view已经添加到视图层级View中),在这个方法中执行视图显示相关附件任务,如果重载了这个方法,必须在方法中调用[super viewDidAppear]。 


    6、viewWillLayoutSubviews
    view即将布局其Subviews。比如view的bounds改变了(例如状态栏从不显示到显示,视图方向变化),要调整Subviews的位置,在调整之前要做的一些工作就可以在该方法中实现。


    7、viewDidLayoutSubviews
    view已经布局其Subviews,比如view的bounds改变了(例如状态栏从不显示到显示,视图方向变化),已经调整Subviews的位置,在调整完成之后要做的一些工作就可以在该方法中实现。

    二、卸载过程

    IOS学习笔记——ViewController生命周期

    卸载过程调用顺序

    viewDidAppear -> viewWillDisappear -> viewDidDisappear ->dealloc


    8、viewWillDisappear
    view即将从superView中移除且移除动画切换之前,此时还没有调用removeFromSuperview。


    9、viewDidDisappear
    view从superView中移除,移除动画切换之后调用,此时已调用removeFromSuperview。


    10、viewWillUnload
    在VC的view对象从内存中释放之前调用,可以在view被释放前做一些资源清理操作。在iOS6.0开始就废弃了,该方法不再会调用。


    11、dealloc
    释放对象,将全局的被释放的指针设为nil。


    12、viewDidUnload
    在VC的view对象从内存中释放之后调用,可以在view被释放后做一些view相关的引用清理操作,此时view为nil。在iOS6.0开始就废弃了,该方法不再会调用。

  • 相关阅读:
    【Html】Clipboard.js 实现点击复制,剪切板操作
    【转】【Python】python使用urlopen/urlretrieve下载文件时出现403 forbidden的解决方法
    【Html】div 加载 html页面的方法
    【WPF】创建文本字符串的路径PathGeometry
    【WPF】自定义鼠标样式
    Linux 错误记录
    微信开放平台代公众号管理
    微信开放平台获取授权公众号的流程
    vue-router "path" is required in a route configuration
    最大连接数“65535”的误解
  • 原文地址:https://www.cnblogs.com/wq-gril/p/5257722.html
Copyright © 2011-2022 走看看