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 种状态为基础,我们来系统了解一下视图控制器的 ...
随机推荐
- 通过AngularJS实现图片上传及缩略图展示
从项目中截出的代码 HTML部分: <section> <img src="image/user-tuijian/tuijian_banner.png" /> ...
- Linux 命令 ls -l
一.ll命令 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名. Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是很方便. 如果要使用此命令,可以作如下修改:打 ...
- const int * p 和 int const * p 和 int * const p 的区别
首先注意,const int * p 和int const *p 是一样的,并且不管是不是*p,即使const int i和int const i也是一样的,所以我们接下来只讨论int const * ...
- 第五百八十五天 how can I 坚持
时间过得真的好快啊,晚上不一会就十一点多了,稍微一堕落,时间就没了,还没来得及好好看会书.. 终于把solr拼音搜索弄好了,明天搞搞suggest. 写字,睡觉.
- MySQL_杭州11月销售昨日未上架的SKU_20161212
#C034杭州11月销售昨日未上架的SKU SELECT 城市,a.订单日期,a.客户数,a.订单数,b.产品数,a.金额,c.销售确认额,c.毛利额,c.毛利率 FROM ( SELECT 城市,订 ...
- flex4.0密钥及破解方式
输入下面的序列号: 1424-4507-0757-7016-8907-6937 1424-4785-4428-8084-6314-8733 1424-4794-9281-8063-2338-9079 ...
- 循序渐进Python3(三) -- 2 -- 内置函数
上一篇我们介绍了21个最常用到的函数,简单列一下,帮助回忆巩固: 1.abs 2.dict 3.float 4.help 5.input 6.int 7.len 8.list 9.max 10.min ...
- Lua __index元方法
[Lua __index元方法] 当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键.如果__ ...
- centos7 ip地址设置
centos7 ip地址设置 http://simonhu.blog.51cto.com/196416/1588971 CentOS系统 修改DNS 修改对应网卡的DNS的配置文件 # vi /etc ...
- strcat strcpy 使用出现的问题汇总
事例1(转) 在程序中多次用的strcat函数,但是有时候编译通过,但是执行时却出现了错误.为了进一步了解strcat函数的使用,我首先写了这样的一个测试程序: main(){ char ...