IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> OOM问题原理解析(三),太现实了 -> 正文阅读

[移动开发]OOM问题原理解析(三),太现实了

如果不可以后台运行或挂起会经历

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面试真题解析

Android大厂面试真题解析

各个模块学习视频:如数据结构与算法

**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](

)**

算法与数据结构资料图

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
一线互联网架构师

这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!

本文已被腾讯CODING开源托管项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录,自学资源及系列文章持续更新中…
习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!

本文已被腾讯CODING开源托管项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录,自学资源及系列文章持续更新中…

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:56:29  更:2021-09-11 18:57:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:21:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码