IOS UI-控制器的生命周期
一、控制器的生命周期
代码
@interface NJOneViewController () @property (nonatomic, strong) NSArray *foods;
@end @implementation NJOneViewController // 当控制器的view加载完毕就调用
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"1控制器的view加载完毕");
} // 控制器的view即将显示的时候调用
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
NSLog(@"1控制器的view即将显示");
} // 控制器的view完全显示的时候调用
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"1控制器的view完全显示");
} // 控制器的view即将消失的时候调用
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
NSLog(@"1控制器的view即将消失");
}
// 控制器的view完全消失的时候调用
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
NSLog(@"1控制器的view完全消失");
} // 控制器的view即将销毁的时候调用
- (void)viewWillUnload
{
[super viewWillUnload];
}
// 控制器的view完全销毁的时候调用
- (void)viewDidUnload
{
[super viewDidUnload];
// 清空不需要的属性
// [self.foods release];
self.foods = nil;
} //- (void)setFoods:(NSArray *)foods
//{
// if (_foods != foods) {
// [foods release];
// _foods = [foods retain];
// }
//} // 接收到内存警告的时候调用
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
/**/ @end
三个重要方法
// 控制器的view即将销毁的时候调用
- (void)viewWillUnload
{
[super viewWillUnload];
}
// 控制器的view完全销毁的时候调用
- (void)viewDidUnload
{
[super viewDidUnload];
// 清空不需要的属性
// [self.foods release];
self.foods = nil;
} // 接收到内存警告的时候调用
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
补充:
两个内存警告的区别(和代理中得比较):
代理的内存警告:当application发生一些事情的时候(接收到内存警告的时候),会先通知它的代理,之后代理会通知它的window,window会通知它的根控制器,根控制器会通知它的子控制器。内存警告是由上往下一层一层往下传的(可以通过在两个地方打印输出验证)。
需要了解它的父类是如何处理内存警告的。
模拟内存警告:

内存警告的处理示意图:

控制器的view是否可以销毁?它怎么知道是否可以销毁呢?如何判断?它是判断这个view是否是在windows上面。

当前one控制器在栈顶,one控制器对应的view显示在window上,如果此时发生内存警告,那么one因为在window上面,所以不会被销毁。

若此时再来一个two控制器,它创建对应的twoview显示到window上,one对应的view移开了,此时如果发生内存警告,则此时oneview已经不再在window上显示,所以会被销毁。
特别说明:outlet代表着属性,当控制器创建的时候,属性一般也是有值的,当调用了- (void)viewDidUnload方法以后,即控制器的view完全销毁了以后,所有的属性数据会清空。一般在ios5以前,还会在这个方法里面清空里面的所有属性。
提示:所有的控制器的这些方法其实是一个循环。

IOS UI-控制器的生命周期的更多相关文章
- iOS视图控制器的生命周期
今天面试有一道面试题因为回答不好,因为也不经常涉及所以有点模糊,我选择了最保守的回答,没有展开写出我对这个问题的理解. 问题:IOS 开发 loadView 和 viewDidLoad 的区别? 经过 ...
- 通俗易懂的讲解iphone视图控制器的生命周期
IOS 视图控制器的生命周期非常非常重要,所以我有必要写个文章来和大家一起探讨问题. 今天在学习视图控制器的生命周期,也看了一下网上的一些资料,但总觉得不是那么好理解,首先我们来看一张图: 先粗略讲一 ...
- iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期
iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期 一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在stor ...
- iOS开发UI篇—UITabBarController生命周期(使用storyoard搭建)
iOS开发UI篇—UITabBarController生命周期(使用storyoard搭建) 一.UITabBarController在storyoard中得搭建 1.新建一个项目,把storyb ...
- iOS 控制器的生命周期(UIController)
前言: 在iOS开发中,控制器的生命周期非常重要,什么时候加载页面,什么时候请求接口,什么时候刷新界面等等,都有很多值得优化的地方 loadView: 最先执行的方法,控制器关联的有Nib文件的时候, ...
- iOS UI-(多)视图控制器的生命周期、加载方法和模态视图方法以及屌丝方法
#import "ViewController.h" #import "SecondViewController.h" @interface ViewContr ...
- iOS学习笔记—ViewController/生命周期
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...
- [转载] iOS应用程序的生命周期
iOS应用程序的生命周期 2015-06-23 iOS大全 (点击上方蓝字,快速关注我们) iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些 ...
- iOS视图控制对象生命周期
iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...
- iOS 应用程序的生命周期
iOS 应用程序的生命周期(网络资源总结) http://blog.csdn.net/totogo2010/article/details/8048652 http://www.cocoachina. ...
随机推荐
- 基于docker的gitlab+gitlabrunner+ansible自动部署
系统架构图 网络架构 一.安装docker,确保hostname没有问题 ,查看/etc/hostname./etc/hosts. https://docs.docker.com/engine/ins ...
- PKU 2559 Largest Rectangle in a Histogram(单调栈)
题目大意:原题链接 一排紧密相连的矩形,求能构成的最大矩形面积. 为了防止栈为空,所以提前加入元素(-1,0) #include<cstdio> #include<stack> ...
- ansible playbook部署ELK集群系统
一.介绍 总共4台机器,分别为 192.168.1.99 192.168.1.100 192.168.1.210 192.168.1.211 服务所在机器为: redis:192.168.1.211 ...
- python3_json模块使用与字符编码问题
序列化:将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是json,xml. 反序列化:就是从存储区域(json,xml)读取反序列化对象的状态,重新创建该对象 Json:一种轻 ...
- Docker-初始docker
一.什么是Docker Docker 在容器的基础上,进行了进一步的封装,从文件系统.网络互联到进程隔离等等,极大的简化了容器的创建和维护.使得 Docker 技术比虚拟机技术更为轻便.快捷. 下面的 ...
- tab标签 插件 by 腾讯 jianminlu
/** * @version 0.1 * @author jianminlu * @update 2013-06-19 15:23 */ (function ($) { /** * @name tab ...
- kali 安装virtualbox
安装virualbox 的三大步: 1.添加源: Add the following line to your /etc/apt/sources.list: deb http://download.v ...
- 如何生成SSH key
SSH key提供了一种与GitHub通信的方式,通过这种方式,能够在不输入密码的情况下,将GitHub作为自己的remote端服务器,进行版本控制 步骤 检查SSH keys是否存在 生成新的ssh ...
- Jenkins 集成Ansible教程
前提条件: 1. 部署Jenkins Server 2. 部署 Ansible Server 一.在Jenkins安装SSH插件 系统管理 -> 插件管理 二.在Jenkins 凭证中添加Ans ...
- JDBC连接池&DBUtils
JDBC连接池 DBCP:Apache推出的Database Connection Pool 使用步骤: > 添加jar包 commons-dbcp-1.4.jar commons-pool ...