iOS开发遇到memory持续上涨导致页面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就可以继续下到手机上调试了。
    原文链接:http://blog.csdn.net/u010696366/article/details/47984651
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值