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.主要用于展示内容的 ...
随机推荐
- linux下防火墙iptables原理及使用
iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ...
- Linux基础命令详解-3
本篇详解的命令有以下15个 1.chown 更改文件和文件夹的用户和组所有权 2.useradd 创建一个新用户 3.userdel 删除一个用户 4.usermod 修改用户帐户 5.echo 打印 ...
- Java 正则表达式详解---https://www.jb51.net/article/16829.htm
一.正则表达式基础知识 我们先从简单的开始.假设你要搜索一个包含字符“cat”的字符串,搜索用的正则表达式就是“cat”.如果搜索对大小写不敏感,单词“catalog”.“Catherine”.“so ...
- bootshiro---开源的后台管理框架--基于springboot2+ shiro+jwt的真正rest api资源无状态认证权限管理框架,开发人员无需关注权限问题,后端开发完api,前端页面配置即可
https://gitee.com/tomsun28/bootshiro
- apr的使用
APR(Apache Portable Runtime),即Apache可移植运行库,正如官网所言,APR的使命是创建和维护一套软件库,以便在不同操作系统(Windows.Linux等)底层实现的基础 ...
- 【C#】堆、栈和堆栈的区别
导读:今天看视频,就看到了堆.栈这一块了.记得当年初相见(VB视频),劈头盖脸一阵蒙,什么都不知道,那时候师傅叫我挂起来,说我随着学习的进度,慢慢的就会懂了.现在,学到了这里,想着自己对自己从前的问题 ...
- document.execCommand
document.execCommand 在firefox浏览器执行不好,但是在其他浏览器有时候使用会非常方便. 比如在input标签中使用: onkeyup="if(isNaN(value ...
- Apple Pay强势来袭,开发者应做的事情(转)
"iOS8.1就已经有这个功能了,只是木有现在这么的火,现在的趋势是要火的节奏,因此很多电商平台B2B,P2P,C2C,X2X都有可能需要这个屌丝的付款功能了,在此简单的研究一下." ...
- Xcode的代码块和代码块注释
我们看到的这些
- 有大神告诉我为什么pymysql导入失败
import json import requests import pymysql url = 'https://xueqiu.com/v4/statuses/public_timeline_by_ ...