iOS ViewController生命周期
ViewController是view的controller,viewController的职责主要包括管理内部各个view的加载显示与卸载,同时负责与其他ViewController的通信和协调。
在IOS中 有两类ViewController:
1. 显示内容,比如UIViewController,UITableViewController等,同时还可以自定义继承自UIViewController得ViewController。
2. 用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个ViewController容器:如UINavigationViewController和UITabBarController等,
它们都有一个属性:viewControllers。UINavigationController是以Stack的形式来存储和管理ViewController,UITabBarController是以Array的形式来管理ViewController。
ViewController生命周期
alloc -> initWithNibName ->loadView ->viewDidLoad ->
viewWillAppear ->viewDidAppear -> viewWillDisappear ->
viewDidDisappear ->dealloc。
启动程序: ViewDidLoad [view即将显示,此时superview一般为nil,即view还没有加到任何一个view之中]
ViewWillAppear [view已经显示,被加到另一个view中]
View Did Appear [view即将消失,此时一半还没有调用removeFromSuperView]
按下Home键,并没有任何纪录(此时程序被挂起)
双击Home键,删除该程序: ViewWillDisappear [view从superview中移除了]
View Did Disappear
当view被添加到其他view中之前时,会调用viewWillAppear,而之后会调用viewDidAppear
当view从其他view中移除之前时,会调用viewWillDisAppear,而之后会调用viewDidDisappear
所以只有内存不够的时候或是程序被终止的时候,才会调用viewWillDisappear和viewDidDisappear
loadView和viewDidLoad的区别就是,loadView时view还没有生成,viewDidLoad时,view已经生成了,loadView只会被调用一次,而viewDidLoad可能会被调用多次(view可能会被多次加载)。
代码组织 -- 》如何设计良好的viewcontroller
1. init里不要出现创建view的代码。在init里应该只有相关数据的初始化(非常重要),init里不要掉self.view,否则会导致viewcontroller创建view。(因为view是lazyinit的)。
2. loadView中只初始化view,一般用于创建比较关键的view如tableViewController的tabView,UINavigationController的navigationBar。
3. viewDidLoad这时候view已经有了,最适合创建一些附加的view和控件了。有一点需要注意的是,viewDidLoad会调用多次。
4. viewWillAppear这个一般在view被添加到superview之前,切换动画之前调用。在这里可以进行一些显示器前的处理。比如键盘弹出,一些特殊的过程动画。
5. viewDidAppear一般用于显示后。
iOS ViewController生命周期的更多相关文章
- 【Xamarin 开发 IOS --IOS ViewController生命周期】
ViewController ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内 ...
- IOS ViewController 生命周期
加载过程 第一步 -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 第二步 -(void) ...
- iOS学习笔记—ViewController/生命周期
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...
- 图解ios程序生命周期
图解ios程序生命周期 应用程序启动后状态有Active.Inactive.Background.Suspended.Not running这5种状态,几种状态的转换见下图: 在AppDelegate ...
- (转)深入浅出 iOS 之生命周期
原文:http://www.cocoachina.com/applenews/devnews/2011/0817/3129.html 深入浅出 iOS 之生命周期 发布于:2011-08-17 10: ...
- iOS控制器生命周期
//view加载完毕就会自动调用 - (void)viewDidLoad; //view即将显示到window上 - (void)viewWillAppear:(BOOL)animated ; //v ...
- 【转】深入浅出 iOS 之生命周期
[iOS]深入浅出 iOS 之生命周期 深入浅出 iOS 之生命周期 http://blog.csdn.net/kesalin/article/details/6691766 罗朝辉(http:// ...
- IOS学习笔记37——ViewController生命周期详解
在我之前的学习笔记中讨论过ViewController,过了这么久,对它也有了新的认识和体会,ViewController是我们在开发过程中碰到最多的朋友,今天就来好好认识一下它.ViewContro ...
- iOS视图生命周期
视图是应用的一个重要组成部分,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 1.视图生命周期与视图控制器关系 以视图的4 种状态为基础,我们来系统了解一下视图控制器的 ...
随机推荐
- CSS的相对定位和就对定位
1.元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,top这些偏移属性都是没有效果的, 使用相 ...
- tsclient rdesktop remina freerdp
- $.when().then()
当两个Ajax请求是成功的则执行函数myFunc,如果任一个有错误则执行myFailure. $.when($.ajax("/page1.php"), $.ajax("/ ...
- brew安装
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #454545 } span.s1 { font: 12. ...
- iptables-qos-tcpcopy-tc-tcpdump
QOS: https://www.chiphell.com/thread-427876-1-1.html iptables指南: http://man.chinaunix.net/network/ip ...
- Jvm支持的最大线程数
摘自 http://blog.csdn.net/xyls12345/article/details/26482387 JVM最大线程数 (2012-07-04 23:20:15) 转载▼ 标签: jv ...
- arpg网页游戏之地图(二)
[转]http://www.cnblogs.com/BlueWoods/p/4684557.html 这一节说说视窗,这个视窗,也就是游戏的视角.现在的网页游戏分为2D游戏,2.5D游戏和3D游戏,2 ...
- 主机名链接数据库,无法生成 SSPI 上下文
两台Server,环境一样,都使用同一域账号. 1的SQL Server可以通过Windows认证连接到2,但2通过Windows认证连接1时报如下错误: 目标主体名称不正确,无法生成 SSPI 上下 ...
- HTML5基础
一.HTML(超文本标记语言) 1>就是文本,由浏览器负责将它解析成具体的网页内容 2>由N个标签(节点.元素.标记)组成 二.常见HTML标签 1>标题标签:h1.h2.h3.h4 ...
- Python随机森林算法的使用
#coding:utf-8 # from python.Lib.packages.sklearn.tree import DecisionTreeClassifier # from python.Li ...