- 浏览: 141949 次
- 性别:
- 来自: 北京
文章分类
最新评论
转http://www.cnblogs.com/smileEvday/archive/2012/05/10/2495153.html#2374395
UIViewController生命周期
UIViewControl是IOS程序中的一个重要组成部分,扮演者一个大管家的身份,管理着程序中的众多视图,今天看看了官方文档并做了如下一些简单的记录:
何时加载view,加载的原则是什么,视图何时消失等问题,文档中讲的都很详细。
Controller的view最好在需要显示时再去加载,并且在系统发出内存警告时释放比必要的view及相关的数据对象。
一、UIViewController的初始化
初始化时会根据需要调用init,initWithCoder等相关函数,这个时候我们可以做一下简单的初始化操作,建立ViewController中需要使用的数据模型等,不建议在初始化阶段就直接创建view及其他与显示有关的对象(应该放到loadView的时候去创建,或者采用懒加载的方法创建)。
我们都知道ViewController可以通过代码和xib两种方式创建,这两种方式的初始化流程也不尽相同。
1)使用xib创建的VC
xib其实最终是会把我们的设置保存成一个数据集,当需要初始化构建VC的时候,回去读取记录的数据集,然后帮我们动态的创建VC,因此可以想象它在初始化时会先去找看是否实现initWithCoder方法,如果该类实现了该方法,就直接调用initWithCoder方法创建对象,如果没有实现的话就调用init方法。调用完初始化方法以后紧接着会调用awakeFromNib方法,在这个方法里面我们可以做进一步的初始化操作。
2)使用代码创建VC
使用代码创建时,我们根据需要手动的创建VC中的数据,如果自己定制VC时,还需要在init中调用[super init]。
二、UIViewController中View的load和unload
前面讲了不建议在VC初始化的时候就创建view及其他与显示相关的代码,官方文档建议将View的初始化操作放到loadView的时候再做,当VC接到内存告警时会调用didRecieveMemoryWarning这个时候我们就要做出响应,释放暂时不需要的对象。如果无视这个警告,系统内存不够用时会会继续发送,如果还得不到处理就会强制退出程序。下面看具体的loadView和unloadView时候都会做什么操作。
1)Load周期
当需要显示或者访问view属性时,view没有创建的话,VC就会调用loadView方法,在这个时候会创建一个view并将其赋给VC.view属性。紧接着就会调用VC的viewDidLoad方法,这个时候VC.view保证是有值的,可以做进一步的初始化操作,例如添加一些subview。注意:定制VC时,如果覆盖loadView方法,不需要调用[super loadView]方法。
2)Unload周期
当app收到内存警告的时候,会调用每一个VC的didRecieveMemoryWarning方法,我们需要做出响应,释放程序中暂时不需要的资源。通常都会重写该方法,重写时候需要调用super的该方法。如果检测到当前VC的view可以被安全释放的话,就会调用viewWillUnload方法,这个我们必须要重视,因为当VC的view消失时候它的subviews可能会被一起释放,我们需要根据具体情况做一些记录,以保证下次能够正确创建,同时不出现内存泄漏。调用viewWillUnload以后,会将VC.view属性设置成nil,然后在调用viewDidUnload方法,这个时候我们可以释放那些强引用的对象。
UIViewController生命周期
UIViewControl是IOS程序中的一个重要组成部分,扮演者一个大管家的身份,管理着程序中的众多视图,今天看看了官方文档并做了如下一些简单的记录:
何时加载view,加载的原则是什么,视图何时消失等问题,文档中讲的都很详细。
Controller的view最好在需要显示时再去加载,并且在系统发出内存警告时释放比必要的view及相关的数据对象。
一、UIViewController的初始化
初始化时会根据需要调用init,initWithCoder等相关函数,这个时候我们可以做一下简单的初始化操作,建立ViewController中需要使用的数据模型等,不建议在初始化阶段就直接创建view及其他与显示有关的对象(应该放到loadView的时候去创建,或者采用懒加载的方法创建)。
我们都知道ViewController可以通过代码和xib两种方式创建,这两种方式的初始化流程也不尽相同。
1)使用xib创建的VC
xib其实最终是会把我们的设置保存成一个数据集,当需要初始化构建VC的时候,回去读取记录的数据集,然后帮我们动态的创建VC,因此可以想象它在初始化时会先去找看是否实现initWithCoder方法,如果该类实现了该方法,就直接调用initWithCoder方法创建对象,如果没有实现的话就调用init方法。调用完初始化方法以后紧接着会调用awakeFromNib方法,在这个方法里面我们可以做进一步的初始化操作。
2)使用代码创建VC
使用代码创建时,我们根据需要手动的创建VC中的数据,如果自己定制VC时,还需要在init中调用[super init]。
二、UIViewController中View的load和unload
前面讲了不建议在VC初始化的时候就创建view及其他与显示相关的代码,官方文档建议将View的初始化操作放到loadView的时候再做,当VC接到内存告警时会调用didRecieveMemoryWarning这个时候我们就要做出响应,释放暂时不需要的对象。如果无视这个警告,系统内存不够用时会会继续发送,如果还得不到处理就会强制退出程序。下面看具体的loadView和unloadView时候都会做什么操作。
1)Load周期
当需要显示或者访问view属性时,view没有创建的话,VC就会调用loadView方法,在这个时候会创建一个view并将其赋给VC.view属性。紧接着就会调用VC的viewDidLoad方法,这个时候VC.view保证是有值的,可以做进一步的初始化操作,例如添加一些subview。注意:定制VC时,如果覆盖loadView方法,不需要调用[super loadView]方法。
2)Unload周期
当app收到内存警告的时候,会调用每一个VC的didRecieveMemoryWarning方法,我们需要做出响应,释放程序中暂时不需要的资源。通常都会重写该方法,重写时候需要调用super的该方法。如果检测到当前VC的view可以被安全释放的话,就会调用viewWillUnload方法,这个我们必须要重视,因为当VC的view消失时候它的subviews可能会被一起释放,我们需要根据具体情况做一些记录,以保证下次能够正确创建,同时不出现内存泄漏。调用viewWillUnload以后,会将VC.view属性设置成nil,然后在调用viewDidUnload方法,这个时候我们可以释放那些强引用的对象。
发表评论
-
Foundation和UIKit框架组织图
2013-01-28 08:58 6185... -
[转]linux常用命令
2013-01-26 22:33 892本文来自于http://blog.csdn.net/totog ... -
[转] NSString 控件消息
2013-01-19 15:52 1060【转】http://www.tongwenguan.com/o ... -
关闭arc
2013-01-17 22:35 04.2前的xcode中,打开“Build Setting”,找 ... -
地址薄源码分析
2013-01-17 10:13 1640ContactViewController.h 头文件 #im ... -
iOS main函数 机器码
2013-01-17 07:24 2497main 启动对应机器码分析 0x2730: pushl ... -
歌曲源码剪切分析
2013-01-16 17:19 7579mian.m 以及appdelegate就不说了,主要说说C控 ... -
[转]深入理解Objective-c中@class的含义
2013-01-16 07:16 1040[转]http://blog.prosight.me/i ... -
UIImageView【转】
2013-01-16 07:17 5464【转】http://my.oschina.net/plumso ... -
isKindOfClass<> isMemberOfClass[转]
2013-01-15 10:27 0转http://blog.csdn.net/totogo201 ... -
NSString 截取,文件读取【转】
2013-01-16 07:18 1529【转】http://www.cnblogs.com/csj00 ... -
loadNibNamed
2013-01-15 10:05 0动态加载,就是在程序运行当中,根据需要动态地加载一些视图,常常 ... -
respondsToSelector
2013-01-15 09:31 2513respondsToSelector该方法询问对象以确定其是否 ... -
initWithFrame<>initWithCoder
2013-01-15 09:19 1765initWithFrame 和 initWithCode ... -
协议protocol
2013-01-16 07:17 1086自定义协议语法如下: @protocol 协议名称 方法之声明 ... -
addSubview<>insertSubView
2013-01-15 08:35 3559addSubview是一层一层往上加,新加的只能放到父视图的最 ... -
IBOutlet IBaction 详解
2013-01-14 23:33 4372IBOutlet对于编译器而言只是一个标记,也就是 ... -
AppDelegate.m 介绍
2013-01-14 22:59 6617【转】[url] www.cnblogs.com/xunzi ... -
didReceiveMemoryWarning
2013-01-14 21:52 5594[转]http://blog.csdn.net/yy404 ... -
OC-plist xib pch StoryBoard
2013-01-14 21:12 1231plist plist文件是什么呢? 它全名是: ...
相关推荐
### UIViewController 生命周期详解 在iOS开发过程中,`UIViewController`作为UIKit框架中的一个重要组成部分,其生命周期管理是每一个iOS开发者都需要掌握的核心技能之一。理解`UIViewController`的生命周期不仅有...
接着,我们转向UIViewController的生命周期。UIViewController在加载视图时有其特定的流程。当创建一个UIViewController实例时,我们可以使用`init`,`initWithNibName:bundle:`,或`initWithCoder:`。在代码中,...
在Apple的iOS应用开发中,程序的生命周期是开发者必须要深入理解的关键概念。程序生命周期涉及到从应用程序启动、运行、暂停、后台处理、恢复直至关闭的全过程。对于iPhone开发来说,掌握这个生命周期有助于编写更加...
通过学习这个`UIViewController Demo`源代码,开发者可以更好地理解`UIViewController`的生命周期、视图加载机制以及如何在不同情况下创建和使用视图控制器。同时,掌握这两种创建方式有助于提高代码的灵活性和可...
本文将深入探讨UIViewController的生命周期及其主要属性和方法,帮助开发者更好地理解和运用这一关键组件。 首先,我们要理解UIViewController的生命周期,这是了解其工作原理的基础。生命周期包含了从创建、加载...
本篇文章将深入探讨如何通过`UIViewController+Swizzling`来实现在不修改原有代码的情况下,对页面视图控制器的生命周期进行统计。 首先,我们需要理解什么是Method Swizzling。在Objective-C中,由于其动态性,...
第一个Demo是一个空白项目,它的主要目的是展示在没有使用StoryBoard的情况下,应用程序各组件(如UIViewController)的生命周期方法是如何被调用的。在iOS中,UIViewController是视图控制器的核心类,它负责管理一...
animated)}支持以下生命周期事件: UIViewController生命周期挂钩: viewDidLoad viewWillAppear viewDidAppear viewWillDisappear viewDidDisappear UIView生命周期挂钩: didMoveToWindow 注意:操作是在对象自己...
这个类不仅负责管理屏幕上的内容,还处理用户交互、视图生命周期以及与其他控制器的协作。 在屏幕切换这一主题中,`UIViewController`扮演着至关重要的角色。常见的屏幕切换方法包括: 1. **导航控制器...
4. **生命周期方法的增强** iOS 5新增了`willAnimateRotationToInterfaceOrientation:duration:`和`didRotateFromInterfaceOrientation:`方法,帮助开发者在界面旋转过程中处理动画。不过,这些方法在iOS 6后被`...
通过addChildViewController方法添加子控制器,并调用didMove(toParent:)方法完成添加过程,可以确保生命周期管理和事件传递的正确性。 5. **Notification Center**:UIViewController在iOS5中对Notification ...
UIViewController生命周期方法挂钩 其他便利的属性 在github上引用,。 预习 用法 UINavigationBar外观管理 只需通过覆盖UIViewController+RRExtension.h中定义的viewcontroller方法,就可以静态或动
而UIViewController则是负责管理这些UIView的控制器,它不直接参与视图的绘制,而是控制UIView的生命周期、布局和行为。可以将UIViewController看作是一个框架,它可以根据需要添加、移除或替换UIView,就像更换相框...
UIViewController负责管理视图的生命周期,而UIView则负责显示内容和响应用户的交互。了解UIViewController的加载方式以及UIView的加载机制对于开发一个功能强大且高效的应用程序至关重要。 ### UIViewController的...
它的生命周期是指从创建到销毁的过程中,系统调用的一系列方法。了解并掌握这些生命周期方法对于优化应用性能和用户体验至关重要。以下是对标题和描述中提及的生命周期方法的详细解释: 1. **init函数**: - `init...
但在iOS 5中,Apple引入了新的Auto Layout系统和UIViewController的生命周期方法,以更加灵活和统一的方式处理屏幕旋转。 1. Auto Layout: Auto Layout是一种布局管理系统,它允许开发者在不同尺寸和方向的屏幕上...
首先,我们需要了解UIViewController的生命周期和过渡动画的基础知识。UIViewController提供了`present`和`dismiss`方法来显示和隐藏其他视图控制器,而这些操作默认伴随着系统提供的过渡动画。但为了实现个性化的...