【iOS】UIViewController的生命周期
-(void)loadView;
- loadView方法在UIVIewController的view被访问且为空的时候调用。
loadView方法不应该直接被调用,而是由系统调用。它会加载或创建一个View并把它赋值给UIViewController的view属性。
以下代码会导致死循环
```
-(void)loadView{
NSLog(@"ViewController loadView");
}-
(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"ViewController viewDidLoad");
self.view.backgroundColor = [UIColor whiteColor];
}
```- (void)viewDidLoad;
-
当loadView将view加载完成,会调用viewDidLoad方法,该方法在UIVIewController初始化过程中只会执行一次,在该方法中可以进行页面相关的初始化。
-(void)viewWillAppear:(BOOL)animated;
- 页面将要出现时调用。页面每次即将出现时都会调用。
-
当app有多级ViewController,pop操作后都会调用即将出现的ViewController的该方法,如果每次ViewController的出现都需要刷新页面,可在该方法中实现。
-(void)viewWillLayoutSubviews;
-
ViewController的view即将对subviews进行布局。
-(void)viewDidLayoutSubviews;
-
ViewController的view对subviews的布局完成。
-(void)viewDidAppear:(BOOL)animated;
- 页面已经出现时调用。页面每次出现时都会调用。
-
在view被添加到视图层级中以及多视图,上下级视图切换时调用这个方法,在这里可以对正在显示的视图做进一步的设置。
-(void)viewWillDisappear:(BOOL)animated;
- 页面将要消失时调用。可能会被多次调用。
-
页面之间push或者pop时都会调用。
-(void)viewDidDisappear:(BOOL)animated;
- 页面已经消失时调用。可能会被多次调用。
-
页面之间push或者pop时都会调用。
-(void)dealloc;
- 页面被销毁时调用。
- 该方法可以用来调试页面是否存在内存泄漏,如果存在,在页面出栈时将不会调用该方法。
-
在该方法中可以处理需要手动释放的东西,比如观察者的移除。
常用周期方法执行顺序
由于我编码习惯是纯代码布局,所以对xib布局和storyboard布局的相关方法未加研究,代码如下
(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"ViewController viewDidLoad");
self.view.backgroundColor = [UIColor whiteColor];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"ViewController viewWillAppear");
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"ViewController viewDidAppear");
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"ViewController viewWillDisappear");
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"ViewController viewDidDisappear");
}
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
NSLog(@"ViewController viewWillLayoutSubviews");
}
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
NSLog(@"ViewController viewDidLayoutSubviews");
}
(void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}打印结果:
ViewController viewDidLoad
ViewController viewWillAppear
ViewController viewWillLayoutSubviews
ViewController viewDidLayoutSubviews
ViewController viewDidAppear
以上只是显示一个页面的代码和打印结果,下面我们来看一下页面间的跳转时,生命周期执行的顺序。
从A页面调转到B页面,A页面代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"A viewDidLoad");
self.view.backgroundColor = [UIColor whiteColor];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"A viewWillAppear");
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"A viewDidAppear");
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"A viewWillDisappear");
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"A viewDidDisappear");
}
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
NSLog(@"A viewWillLayoutSubviews");
}
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
NSLog(@"A viewDidLayoutSubviews");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)touchesBegan:(NSSet
B页面代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"B viewDidLoad");
self.view.backgroundColor = [UIColor whiteColor];
}
-(void)dealloc{
NSLog(@"B dealloc");
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"B viewWillAppear");
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"B viewDidAppear");
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"B viewWillDisappear");
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"B viewDidDisappear");
}
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
NSLog(@"B viewWillLayoutSubviews");
}
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
NSLog(@"B viewDidLayoutSubviews");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)touchesBegan:(NSSet
}
从A页面跳转到B页面,再从B页面回到A页面,打印结果:
A viewDidLoad
A viewWillAppear
A viewWillLayoutSubviews
A viewDidLayoutSubviews
A viewDidAppear
************************跳转啦****************************
B viewDidLoad
A viewWillDisappear
B viewWillAppear
B viewWillLayoutSubviews
B viewDidLayoutSubviews
A viewDidDisappear
B viewDidAppear
************************回去啦****************************
B viewWillDisappear
A viewWillAppear
B viewDidDisappear
A viewDidAppear
B dealloc
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android Socket编程(udp)初探
前言 昨天刚把socket tcp编程简单讲解了,今天趁热打铁把udp编程也讲一下。一个是为了提醒自己,坚持下去,另外还是为了提升技术打下基础。如果讲的有什么不对的还请各位指正。 首先 先上图,俗话说no pic say a xx udp编程服务端.png udp编程客户端.png 其次 客户端代码(线程中) public class UdpClientThread extends Thread { //IP地址 private String mAddress; //端口 private int port; //发送内容 private String msg; private Handler mHandler; public UdpClientThread(Handler handler, String address, int port, String msg) { this.mHandler = handler; this.mAddress = address; this.port = port; this.msg = msg; } @Override public void ru...
- 下一篇
Android NestedScrollView滚动到顶部固定子View悬停挂靠粘在顶端
Android NestedScrollView滚动到顶部固定子View悬停挂靠粘在顶端 网上有一个StickyScrollView,称之为粘性ScrollView,比如一个垂直方向的布局,依次摆放几个子View,当某一个子View滚到到顶端时候要停靠在顶部,悬停在顶部的位置不动。这很像联系人的pinned,假设联系人按照Z分组后,若滚动到顶部,Z就悬停靠在顶端不动,下面到的联系人继续滚到。当用户下拉时候,又恢复正常。如: 初始化阶段: 滚到使blog到顶端,然后此时姓名被顶走了: StickyScrollView原先是继承自ScrollView,然而现在ScrollView已经被新型的NestedScrollView逐渐取代了,现在我把它改写成继承自NestedScrollView后,整理出来: package zhangphil.test; import java.util.ArrayList; import android.content.Context; import android.content.res.TypedArray; import android.graphics...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7安装Docker,走上虚拟化容器引擎之路