如果不可以后台运行或挂起会经历
Active–>Inactive–>Background–>Suspended–>Not Running
Background–>Suspended
调用 applicationDidEnterBackground: 发送:UIApplicationDidEnterBackgroundNotification
Suspended–>Not Running
调用 applicationWillTerminate: 发送:UIApplicationWillTerminateNotification
1. 挂起后,重新运行
Suspended–>Background–>Inactive–>Active
Background–>Inactive
调用 applicationWillEnterForeground: 发送:UIApplicationWillEnterForegroundNotification
Inactive–>Active
调用 applicationDidBecomeActive: 发送:UIApplicationDidBecomeActiveNotification
1. 内存不足,杀死程序
Background–>Suspended–>Not running
这种情况不会调用任何方法,也不会发送任何通知。
[](
)二、UIViewController的生命周期
==================================================================================
下面是UIViewController生命的相关方法(注意顺序)
//类的初始化方法,并不是每次创建对象都调用,只有这个类第一次创建对象才会调用,做一些类的准备工
作,再次创建这个类的对象。initialize方法将不会被调用,对于这个类的子类,如果实现了initialize
方法,在这个子类第一次创建对象是会调用自己的initialization方法,没有实现者由调用父类实现方
法;可以用以实现相关全局变量
- (void)initialize;
//对象初始化方法init方法和initCoder方法相似,只是被调用的环境不一样,如果用代码进行初始化,会
调用init,从nib文件或者归档进行初始化,会调用initCoder。
- (instancetype)init;
//从归档初始化
- (instancetype)initWithCoder:(NSCoder *)coder;
//加载视图:是开始加载视图的起始方法,除非手动调用,否则在viewcontroller的生命周期中没特殊情况
只被调用一次;ViewController的view是使用了lazyInit方式创建,就是说你调用的view属性的
getter:[self view]。在getter里会先判断view是否创建,如果没有创建,那么会调用loadView来
创建view。loadView和viewDidLoad的一个区别就是:loadView时还没有view。而viewDidLoad时
view以及创建好了。
-(void)loadView;
//将要加载视图:,类中成员对象和变量的初始化我们都会放在这个方法中,在类创建后,无论视图的展现或消失,这个方法也是只会在将要布局时调用一次。
- (void)viewDidLoad;
//将要展示
-(void)viewWillAppear:(BOOL)animated;
//将要布局子视图,在viewWillAppear后调用,将要对子视图进行布局。
-(void)viewWillLayoutSubviews;
//已经布局子视图
-(void)viewDidLayoutSubviews;
//已经展示
-(void)viewDidAppear:(BOOL)animated;
//将要消失
-(void)viewWillDisappear:(BOOL)animated;
//已经消失
-(void)viewDidDisappear:(BOOL)animated;
//内存警告
- (void)didReceiveMemoryWarning;
//被释放
-(void)dealloc;
从nib文件加载的controller,只要不释放,在每次viewWillAppare时都会调用layoutSubviews方
法,有时甚至会在viewDidAppare后在调用一次layoutSubviews,而重点是从代码加载的则只会在开始调
用一次,之后都不会,所以注意,在layoutSubviews中写相关的布局代码十分危险。
[](
)UIViewController的新收获
===============================================================================
1. parentViewController属性
@property(nullable,nonatomic,weak,readonly) UIViewController *parentViewController;
例如:我的项目结构为 tabbarController > navigationContriller > contorller
打印
NSLog(@“self.parentViewController > %@ ===== %@”,[self.parentViewController.parentViewController class],self.parentViewController.parentViewController);
输出
self.parentViewController > YLUITabBarViewController ===== <YLUITabBarViewController: 0x10201ee00>
无需调用window的rootcontroller来获取YLUITabBarViewController
2.模态跳转中Controller的从属
主要是两个参数,只要模态关系没有被释放,我们就可以利用这个两个参数进行对象获取,传值什么的根本不需要block或者delegate;
//其所present的contller,比如,A和B两个controller,A跳转到B,那么A的presentedViewController就是B
@property(nullable, nonatomic,readonly) UIViewController *presentedViewController NS_AVAILABLE_IOS(5_0);
//和上面的方法刚好相反,比如,A和B两个controller,A跳转到B,那么B的presentingViewController就是A
@property(nullable, nonatomic,readonly) UIViewController *presentingViewController NS_AVAILABLE_IOS(5_0);
传值可以简单使用
self.presentingViewController.view.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
小福利:
在当下这个碎片化信息环境的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了
很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘
如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。
2021大厂最新Android面试真题解析
各个模块学习视频:如数据结构与算法
**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](
)**
只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!
本文已被腾讯CODING开源托管项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录,自学资源及系列文章持续更新中…
习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!
本文已被腾讯CODING开源托管项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录,自学资源及系列文章持续更新中…