OS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、vi init viewdidload

iOS视图控制对象生命周期:

init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的区别及用途

init-初始化程序

viewDidLoad-加载视图

viewWillAppear-UIViewController对象的视图即将加入窗口时调用;

viewDidApper-UIViewController对象的视图已经加入到窗口时调用;

viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;

viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;

viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;

viewDidUnload-当内存过低,释放一些不需要的视图时调用。

视图控制对象通过alloc和init来创建,但是视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。比如,当某个标签有很多UIViewController对象,那么对于任何一个UIViewController对象的视图,只有相应的标签被选中时才会被创建出来。

比如如下代码:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization        UITabBarItem *tbi = [self tabBarItem];        [tbi setTitle:@"CurrentTime"];        [[self view ] setBackgroundColor:[UIColor yellowColor]];        }    return self;}

OS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、vi init viewdidload

我们将UIViewController的init方法中访问的实例变量view在init中将背景设置为黄.色,运行程序,我们能发现背景的确变成了黄.色,但是,在我们还没有需要使用视图的时候,该视图已经加载好了,在UIViewController的初始方法中访问实例变量view,会导致延迟载入机制失效,这个问题看上去不是很严重,但是如果考虑到内存过低警告,那么问题就大了。。。

运行程序,选择模拟器中的硬件->模拟内存过低警告,我们会发现,原本设置的黄.色背景不见了,这是因为,内存过低,视图控制对象会在发出内存过低警告时收到didReceiveMemoryWarning消息,该方法默认实现,检查视图控制对象的视图是否可见,如果不可见,则释放掉,下次在加载该视图时就不会执行init方法,而是只执行viewDidLoad方法,所以需要将[[selfview]setBackgroundColor:[UIColoryellowColor]];放到viewDidLoad中,这样如果视图因为内存过低被释放掉了,下次需要使用到该视图的时候,程序会默认取执行该视图的viewDidLoad方法,这样背景颜色就又出来了。

init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的执行顺序:

从程序的log来看:

2012-10-1915:51:44.811inHyron[483:b903] init

2012-10-1915:51:54.081inHyron[483:b903] viewDidLoad

2012-10-1915:51:54.082inHyron[483:b903] viewVillAppear

2012-10-1915:51:54.084 inHyron[483:b903] viewDidAppear

很明显,先执行init、然后执行viewDidLoad,然后是viewWillAppear最后是viewDidAppear,这样视图就创建好了,当视图消失或者被覆盖的时候:

2012-10-1915:54:14.557inHyron[483:b903] viewWillDisappear

2012-10-1915:54:14.558inHyron[483:b903] viewDidDisappear

这样一来视图就消失了,当模拟内存警告的时候:

2012-10-1915:55:14.333inHyron[483:b903] Received simulated memorywarning.

2012-10-1915:55:14.334inHyron[483:b903] viewWillUnload

2012-10-1915:55:14.335 inHyron[483:b903]viewDidUnload

从log可以看出,当视图控制对象收到内存警告的时候,程序会执行viewWillUnload最后是执行viewDidUnload。

这样,一套的流程就完成了,不知道写的是否详细。。。。

还有看的不明白的,可以取下我的小Demo:http://http://download.csdn.net/detail/weasleyqi/4664799,在CurrentTimeViewController.m当中详细的log都写好了,大家可以取研究研究。

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/190788.html

更多阅读

产品生命周期策略 软件产品的生命周期

企业不能期望产品永远畅销,因为一种产品在市场上的销售情况和获利能力并不是一成不变的,而是随着时间的推移发生变化,这种变化经历了产品的诞生、成长、成熟和衰退的过程,就象生物的生命历程一样,所以称之为产品生命周期。产品生命周期

产品生命周期管理办法 产品生命周期管理

产品生命周期管理办法本办法是根据产品生命周期理论进行制定的。旨在更好地进行产品规划阶段的前端计划、市场推广阶段的全程拉动和全面销售阶段的政策引导。与此同时,做好费用控制和产出预算,力争实现每一个产品项目的经营性收益最

多周期kd实战分析 pdf 从品牌生命周期谈网络推广实战

说到生命周期,产品的生命周期可能大家更熟悉,而品牌也是有生命周期的。品牌生命周期指品牌的市场生命周期,它包括孕育期、幼稚期、成长期、成熟期、衰退期等五个阶段,每个阶段的市场营销策略不尽相同,网络推广自然在各不同阶段有不同的

activity的生命周期 生命周期的三方面

      每个系统生命周期都包括商业方面(商业案例)、预算方面(资金)和技术方面(产品)。系统工程师创建与商业案例和资金约束一致的技术解决方案。系统完整性要求这三方面达到平衡且在所有决策门评审中都受到同等重视。  例如,20世纪80

领导者生命周期理论 人格决定绩效(14)—领导者生命周期

       在前一篇文章《高层的战略沟通冲突》中,我们讲述了一名领导者Tom空降到BN公司,一个与自己主导人格特质不相匹配的组织环境中所产生的冲突。个人与环境的匹配性对个体以及组织的绩效有着重要的影响,在招募新人时,很多时候

声明:《OS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、vi init viewdidload》为网友鸢飞蝶梦几时回分享!如侵犯到您的合法权益请联系我们删除