iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期

一、基本过程

新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉。

在storyboard中,默认的控制器是View Controller,而我们需要的是导航控制器,那么就把系统的给删掉,拖一个导航控制器进来,导航控制器中默认的第一个子控制器是一个tableview controller,这里不需要,把它删掉,重新拖三个View Controller到界面上进行连线,简单的设置就可以了。

按钮连线,按住ctrl,右边界面选择push。

完成基本设置后的界面如下:

经过这么几步简单的设置,就可以实现一个简单的多页面切换。为开发提供了极大的方便,但storyboard也不是万能的,要注意在开发中,如果在最后一个页面添加一个按钮,让它直接跳转到上一个页面会出现问题。

提示:storyboard能做的事情,使用代码都能做,但是代码能够做的事情,storyboard不一定能够做。

通过拖拉控件即可完成简单的界面设置。

下面这样的连线会出现问题:(从后面的控制器跳转到前面,只能通过代码来实现)

产生问题的原因:(当点击返回的时候,不是先把第三个控制器移除栈顶,而是先创建TWO控制器,此时栈里有四个控制器,栈顶的为TWO).

二、控制器的生命周期

代码简单说明:

复制代码
 1 @interface NJOneViewController ()
 2  3 @property (nonatomic, strong) NSArray *foods;
 4 @end  5  6 @implementation NJOneViewController
 7  8 // 当控制器的view加载完毕就调用  9 - (void)viewDidLoad
10 {
11  [super viewDidLoad];
12 NSLog(@"1控制器的view加载完毕");
13 }
14 15 // 控制器的view即将显示的时候调用 16 - (void)viewWillAppear:(BOOL)animated
17 {
18  [super viewWillAppear:YES];
19 NSLog(@"1控制器的view即将显示");
20 }
21 22 // 控制器的view完全显示的时候调用 23 - (void)viewDidAppear:(BOOL)animated
24 {
25  [super viewDidAppear:animated];
26 NSLog(@"1控制器的view完全显示");
27 }
28 29 // 控制器的view即将消失的时候调用 30 - (void)viewWillDisappear:(BOOL)animated
31 {
32  [super viewWillDisappear:animated];
33 NSLog(@"1控制器的view即将消失");
34 }
35 // 控制器的view完全消失的时候调用 36 - (void)viewDidDisappear:(BOOL)animated
37 {
38  [super viewDidDisappear:animated];
39 NSLog(@"1控制器的view完全消失");
40 }
41 42 // 控制器的view即将销毁的时候调用 43 - (void)viewWillUnload
44 {
45  [super viewWillUnload];
46 }
47 // 控制器的view完全销毁的时候调用 48 - (void)viewDidUnload
49 {
50  [super viewDidUnload];
51 // 清空不需要的属性
52 // [self.foods release]; 53 self.foods = nil;
54 }
55 56 //- (void)setFoods:(NSArray *)foods
57 //{
58 // if (_foods != foods) {
59 // [foods release];
60 // _foods = [foods retain];
61 // }
62 //}
63 64 // 接收到内存警告的时候调用 65 - (void)didReceiveMemoryWarning
66 {
67  [super didReceiveMemoryWarning];
68 }
69 /**/ 70 71 @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以前,还会在这个方法里面清空里面的所有属性。

提示:所有的控制器的这些方法其实是一个循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 5.5 1366错误_laravel5.3 在 mysql5.1中运行出错 error: 1366 Incorrect integer

Laravel 在 MySQL5.1 下运行出错 ,错误如下:SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 1 for column status at row 1 (SQL: insert into cases (case_name, status, updated_at, created_at) values (fdsafdsadsa, 1, 1474504956…

计算机组成原理输入实验报告,计算机组成原理实验报告

/串形式构成的 8 位字长的运算器。右方为低 4 位运算芯片,左方为高 4 位运算芯片。低位芯片的进位输出端 Cn4 与高位芯片的进位输入端 Cn 相连,使低 4 位运算产生的进位送进高 4位运算中。低位芯片的进位输入端 Cn 可与外来进位相连,高位芯片…

python中导入模块队列_【每日学习】Python中模块的导入

模块的概念:每一个以扩展名py结束的Python源代码文件都是一个模块模块名同样也是一个标识符,需要符合标识符的命名规则在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具模块就好比工具包,要想使用这个工具包中的工具&#xff0…

setuptools安装_在Ubuntu 18.04系统上安装ERPNext ERP

简介ERPNext是一个功能丰富的企业级ERP系统,使用Frappe框架编写,一个Python和JavaScript的Web应用程序框架,具有:会计管理、库存管理制造管理、客户关系管理系统、销售管理、采购管理、项目管理等特性。ERPNext ERP系统适用于中小…

Spark Mlib TFIDF源码详读 笔记

2019独角兽企业重金招聘Python工程师标准>>> 在提取文本特征时,经常用到TF-IDF算法。Spark Mlib实现了该算法。下面是Spark Mlib中,TF_IDF算法调用的一个实例: def main(args:Array[String]){val sc: SparkContext null …

焦作的计算机三级考试考点,3月河南计算机等级考试考点分布情况

摘要: 3月河南计算机等级考试考点分布情况为你介绍河南计算机等级考试时间为2020年3月28日-30日,为了方便河南考生。下面是小编整理的2020年3月河南计算机等级考试报...河南计算机等级考试时间为2020年3月28日-30日,为了方便河南考生。下面是…

js客户端存储之Web存储

WEB存储 客户端存储有几种方式,WEB存储就是其中一种。最初作为H5的一部分被定义成API形式,后来被剥离出来作为独立的标准。所描述的API包含localStorage对象和sessionStorage对象,这两个对象实际都代表同一个Storage对象,是持久化…

直播软件自动化测试,基于SRS-Bench工具的直播平台性能测试

摘要:性能测试通过自动化的测试工具模拟正常、异常场景来对系统的各项性能指标进行测试。通过性能测试可以分析一个系统能力、瓶颈、关键问题等。本文结合直播平台的部分场景,使用开源SRS-Bench工具对直播并的4个场景进行压力测试,测试直播平…

pythontype函数使用_Python astype(np.float)函数使用方法解析

Python astype(np.float)函数使用方法解析 我的数据库如图结构我取了其中的name age nr,做成array,只要所取数据存在str型,那么取出的数据,全部转化为str型,也就是array阵列的元素全是str,不管数据库定义的…

计算机硬件加速怎么开,显卡硬件加速,小编教你电脑怎么开启显卡硬件加速

小编之前是不知道怎么开启显卡硬件加速的,后来是朋友教我,才知道原来开启显卡硬件加速并不难操作。所以今天小编也将者开启的方法分享给小伙伴们。让你们也知道怎么开启硬件加速。显卡硬件加速有什么作用呢?其实开启了显卡硬件加速&#xff0…

um是代表什么意思_女生约会心里都想什么?女生约会举动代表什么意思

在和女生约会的全过程中,女生的思绪通常都较为细致,1个目光、1个行为、1个中停……都将会蕴含了無限的含意,男生们假如愿意取得成功将女生追到手,很必须剖析一下下女生约会心里都想干什么,女生约会举动代表什么意思&am…

ubuntu mysql开发_ubuntu linux mysql 开发模式与连接编译

【源码 测试】#include #include #include int main(void){MYSQL_RES *result;MYSQL_ROW row;MYSQL *connection, mysql;int state;mysql_init(&mysql);connection mysql_real_connect(&mysql,"localhost","root","951241","mysql…

浅谈浏览器http的缓存机制

针对浏览器的http缓存的分析也算是老生常谈了,每隔一段时间就会冒出一篇不错的文章,其原理也是各大公司面试时几乎必考的问题。 之所以还写一篇这样的文章,是因为近期都在搞新技术,想“回归”下基础,也希望尽量总结的更…

计算机故障检修课过时,第三场公开课|电脑故障维修以及笔记本知识科普

原标题:第三场公开课|电脑故障维修以及笔记本知识科普等待了漫长的一个星期, R&D又带着满满的干货和大家见面啦~你没看错!!这次R&D带来了两份大大的干货给大家分别是大家关心的 电脑故障维修问题以及大家想要了解的 笔记本…

为什么说python是计算机语言的未来_Python这么火,为什么说它不是未来的编程语言?...

本文转载自公众号“读芯术”(ID:AI_Discovery) Python这两年非常火,随处可见的广告让它逐渐变成了一种老少皆知的存在。 虽然问世几十年后,Python才得到编程社区的重视。 但是,其发展的势头似乎无人能及。自2010年年初以来&#x…

win 杀掉占用的端口_Windows netstat 查看端口、进程占用、杀掉进程

转载:http://ywsm.iteye.com/blog/510670http://58582786.blog.51cto.com/1550000/671487目标:在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用.操作:操作分为两步:(1)查看该端口被…

C++课程上 有关“指针” 的小结

上完了C的第二节课以后,觉得应该对这个内容进行一个小结,巩固知识点,并对我的心情进行了一个侧面烘托... 开始上课的老师: 正在上课的我: 上去敲代码的我: 过程是这样的: 下来的我: …

python安装路径查看_查看python安装路径及pip安装的包列表及路径

一、Linux系统 查看Python路径 whereis python 此命令将会列出系统所安装的所有版本的Python的路径效果如下:使用以下命令可分别查看Python2,Python3的安装路径 whereis python2 whereis python3 查看使用pip安装的软件包 默认Python3 pip list Python2查…

python循环10次_开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择...

开发一个循环 5 次计算的小游戏,设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择“、-、*”运算符,构成一个表达式,让用户计算式子结果并输入结果,如果计算结果正确则加一分,如果计算结果错误不…

配置java编译环境

2019独角兽企业重金招聘Python工程师标准>>> (1)我的电脑属性->高级系统配置->环境变量(2)点击第二个"新建(W)..."->输入变量名"JAVA_PATH",变量值"C:\Program Files\Java\jdk1.8.0_91"->确定(3)找系统变量中的Path并双击…