viewcontroller生命周期知识要点
一 viewcontroller执行方法的主要顺序为:
init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewDidUnload—>dealloc
二 关于init方法,一般是- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
如果为viewcontroller创建了配套的xib文件,那么直接调用init方法会自动去寻找对应的xib文件并正确载入;
例如:如果viewcontroller类为MyList,对应的xib文件也是MyList.xib; 那么
UIViewController* vc = [[MyList alloc] init]; 的实际效果和
UIViewController* vc = [[MyList alloc] initWithNibName:@"MyList" bundle:nil]; 是一样的;
但如果文件不是对应的,那么一定要显式指定xib文件名;建议如果是用xib的话,都显示指定文件名。
三 关于loadView.
按照SDK文档的说法,不要自己显示调用这个方法。这个方法会在需要用到view属性但是view属性为nil的时候自动调用的. 如果viewcontroller与nib关联(无论是用xib文件还是storyboard文件等等),那么会从对应的nib中load view并且赋给view属性. 也就是如果是用Interface Builder来写的界面,那么不要重写loadView方法。如果是代码写的界面而且需要提供不一样的view层次的话,子类也可以自己重写这个方法. 大部分情况下其实不需要实现这个方法了.
四 在iOS 6之前,对于不在最上层显示的view controller, 在收到内存警告的时候,系统会将view释放,并调用viewWillUnload和viewDidUnload. 此时重新进入界面的时候viewDidLoad会再次被调用. 所以这时如果还是用MRC的话,注意viewDidLoad中不要因为重入而多次alloc一些对象.
而在iOS 6之后,在收到内存警告的时候,系统会自动回收一些与渲染相关的内存,实际与view相关的内存绝大多数情况下都不需要被回收了。尽管这个时候也可以手动的self.view = nil;来释放内存,但是苹果其实不推荐这么做的,这个时候回到的内存少得可怜,反而增加了处理的复杂度。这个时候其实只需要根据实际需求来释放一些持有的占用大量内存的成员变量.
四 假如在view controller A上present 了一次view controller B, 那么当B被dismiss的时候,A的viewWillApper与viewDidApper是不会被调用的.
在这个方法的注释中有如下这么一段:
Note
If a view controller is presented by a view controller inside of a popover, this method is not invoked on the presenting view controller after the presented controller is dismissed.
viewcontroller生命周期知识要点的更多相关文章
- iOS ViewController生命周期
ViewController是view的controller,viewController的职责主要包括管理内部各个view的加载显示与卸载,同时负责与其他ViewController的通信和协调. ...
- iOS学习笔记—ViewController/生命周期
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...
- 【Xamarin 开发 IOS --IOS ViewController生命周期】
ViewController ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内 ...
- IOS学习笔记37——ViewController生命周期详解
在我之前的学习笔记中讨论过ViewController,过了这么久,对它也有了新的认识和体会,ViewController是我们在开发过程中碰到最多的朋友,今天就来好好认识一下它.ViewContro ...
- maven生命周期绑定要点
生命周期不执行任何操作,都是抱插件大腿 maven-core-3.3.9-sources.jar下META-INF/plexus/components.xml的定义了三个生命周期的插件绑定 参考:ht ...
- ViewController生命周期
alloc -> initWithNibName -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppea ...
- IOS ViewController 生命周期
加载过程 第一步 -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 第二步 -(void) ...
- iOS - ViewController的生命周期
iOS SDK中提供很多原生的ViewController,大大提高了我们的开发效率:那么下面我们就根据开发中我们常用的ViewController谈一谈它的生命周期: (一)按照结构和用法可以对iO ...
- ViewController的生命周期分析和使用
iOS的SDK中提供很多原生ViewController,大大提高了我们的开发效率,下面是我的一些经验. 一.结构 按结构可以对iOS的所有ViewController分成两类:1.主要用于展示内容的 ...
随机推荐
- java面向抽象编程样例
import java.util.*; abstract class Geometry{ public abstract double getArea(); } class Pillar ...
- iOS 3D UI(3D翻转)
demo链接:http://pan.baidu.com/s/1eQVPj0m 先写个demo
- UITableView加载几种不同的cell
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 【bzoj3689】异或之 可持久化Trie树+堆
题目描述 给定n个非负整数A[1], A[2], ……, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n ...
- BZOJ 2179 FFT快速傅立叶 ——FFT
[题目分析] 快速傅里叶变换用于高精度乘法. 其实本质就是循环卷积的计算,也就是多项式的乘法. 两次蝴蝶变换. 二进制取反化递归为迭代. 单位根的巧妙取值,是的复杂度成为了nlogn 范德蒙矩阵计算逆 ...
- 强大!不懂html也来学网抓(xmlhttp/winhttp+fiddler)
http://club.excelhome.net/thread-1159783-1-1.html 学习html强力推荐此网站:http://www.w3school.com.cn/ ,绝对权威 交流 ...
- K大数查询(bzoj 3110)
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置 ...
- Android Studio升级到3.0,抛出Aapt2Exception异常
android studiao错误: Android resource linking failedOutput: D:\_ASWorkSpace\phone_new\app\src\main\res ...
- Linux shell中的竖线(|)——管道符号
管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为comma ...
- SLAVEOF以后
当我们想要某个Redis服务器复制另一个服务器时,我们可以在连接这个Redis服务器的客户端上输入“SLAVEOF”命令指定另一个服务器的IP地址和端口号: SLAVEOF <master_ip ...