ios开发遇到的memory持续上涨导致页面crash解决思路总结
来源:互联网 发布:川崎机器人编程手册 编辑:程序博客网 时间:2024/06/05 16:22
我在IOS遇到过的闪退主要分为程序启动完Lanch page在初始化页面就崩溃,和在程序运行中crash两种;
后者我遇到的情况是memory占用过多,被系统kill掉了一部分正在占用的内存,导致程序运行出错,而crash;这种情况主要是通过分析memory allocation,解决memory issues;
分析memory和time profile在IOS中常用Instruments来帮助分析memory allocation和memory leak;通过连线测试app运行过程中某个行为(两个时间点之间)处理过程中的内存分布,将已经不需要还被其他类reference没释放的资源释放掉,我在做图像处理相关的app开发时,属于对memory占用敏感,遇到过的一个实际问题就是我们在UI层swift和实际处理的c++程序之间的接口层申请了一部分内存,这部分内存在c++处理完之后将结果返回UI层之后才不用了,这时候还是被引用的,所以并不是leak,我们想释放他,确已经lose track了,导致的结果是app每次重新load图片处理一次内存都不断上涨,确没有leak,最终当处理memory peak达到300M以上时就会crash。这里我们用的解决方法是用单例将每次处理需要的这部分内存做成一块静态的pool,只在初始化时申请一次,get的方法也是静态的,每次处理get的都是这块内存,以此解决了本例中memory持续上涨的问题。
此外解决memory的问题还有一些方法:如在Obj-c中使用autoreleasepool{}用closure来强制释放已经不用的资源,而不等GC的周期来做,这种方法适用于很大循环中释放局部变量,在循环中是UIImage的时候会降低memory peak;另外程序系统在memory紧张的时候会收到memory warning, 我们可以重载receivedMemoryWarning函数,在其中释放一些不重要的资源以防本程序被系统杀掉而crash,但此法还要考虑要杀掉的memory是否正在使用,如何处理,如何重新load等。
前者启动时崩溃,可能是需要的framework或动态链接库没有找到,或者实际并没有编译armv7或arm64(iphone5s,iphone6以上)的库,但允许该app运行在机器上,可以在xcode的build setting里更改设置,还经常有的是我用xcode7开发时,app的id隔一段时间就会过期expired,expired之后该id绑定的程序就启动不起来了,表现为加载完Launch页面之后就闪退,我也不知道原因,但是这种可以更改一个新的id,revoke就可以继续下到手机上调试了。
1 0
- ios开发遇到的memory持续上涨导致页面crash解决思路总结
- iOS开发遇到memory持续上涨导致页面crash问题解决思路
- 反汇编程序导致程序crash的解决思路
- 开发时遇到问题的解决思路
- iOS开发:UITableView加载多张照片导致内存上涨的问题
- iOS开发:UITableView加载多张照片导致内存上涨的问题
- iOS开发:UITableView加载多张照片导致内存上涨的问题
- iOS开发 WKWebViewJavascriptBridge Xcode9上导致crash的解决方法
- 【iOS开发】 常遇到的Crash和Bug处理
- iOS开发中遇到的几种crash
- 打开Voice Over时,CATextLayer的string对象兼容NSString和NSAttributedString导致的Crash(二解决思路1)
- 打开Voice Over时,CATextLayer的string对象兼容NSString和NSAttributedString导致的Crash(二解决思路2)
- 打开Voice Over时,CATextLayer的string对象兼容NSString和NSAttributedString导致的Crash(二解决思路3)
- iOS遇到的那些事(持续总结并更新)-MickyChiang
- 解决网页开发过程中遇到的问题以及思路
- web开发遇到的问题与解决思路
- iOS开发笔记--解决UITableView中Cell重用机制导致内容出错的方法总结
- iOS开发笔记--解决UITableView中Cell重用机制导致内容出错的方法总结
- 栈的链式存储结构
- 分而治之
- Java volatile 关键字理解
- 高并发量网站解决方案
- 一个守护vsftp进程的脚本
- ios开发遇到的memory持续上涨导致页面crash解决思路总结
- T_SQL 将一列多行数据合并为一行
- java多线程(八)为什么弃用stop和suspend
- extern 函数声明
- ALTER命令
- C语言实现二叉排序树
- 设计模式之(五)——装饰模式
- HDOJ 2049 不容易系列之(4)——考新郎(排列组合+错排公式)
- 从输入网址到显示网页的全过程分析