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.主要用于展示内容的 ...
随机推荐
- django的rest framework框架——版本、解析器、序列化
一.rest framework的版本使用 1.版本可以写在URL中,通过GET传参,如 http://127.0.0.1:8082/api/users/?version=v1 (1)自定义类获取版本 ...
- myeclipse 改变模版
一.修改Servlet的默认模板代码 使用MyEclipse创建Servlet时,根据默认的Servlet模板生成的Servlet代码如下: 1 package gacl.servlet.study; ...
- Linux下安装MySQLdb模块(Python)
一.MySQLdb-python模块 https://pypi.python.org/pypi/MySQL-python ` 二.安装依赖包 yum -y install python-devel m ...
- 【03】Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办?
[03] Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办? 刚好也遇上了这个问题,百度了一下,以下是解决方法,亲测可行: 1.首先把需要安装的第三方插件,后缀.c ...
- Python标准库之csv(1)
Python标准库之csv(1) 1.Python处理csv文件之csv.writer() import csv def csv_write(path,data): with open(path,'w ...
- 紫书第五章训练3 D - Throwing cards away I
D - Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 at the top ...
- Python之回调函数
在计算机程序设计中,回调函数,或简称回调(Callback),是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 有两种类型的回调函数:即bloc ...
- 【Luogu】P2220容易题(快速幂)
这题真是“容易”.呵呵呵. 参考题解:xyz32768 代码 #include<cstdio> #include<map> #include<algorithm> ...
- [luoguP3608] [USACO17JAN]Balanced Photo平衡的照片(树状数组 + 离散化)
传送门 树状数组裸题 #include <cstdio> #include <cstring> #include <iostream> #include <a ...
- 刷题总结——宠物收养所(bzoj1208)
题目: Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明 ...