iOS App内存优化之 解决UIImagePickerController的图片对象占用RAM过高问题
这个坑会在特定的情况下特别明显:

类似朋友圈的添加多张本地选择\拍照 的图片 并在界面上做一个预览功能
由于没有特别的相机\相册需求,则直接使用系统自带的UIImagePickerController
最简单的方法-> UIImagePickerController 选择图片 -> 代理返回图片对象-> 在array中添加图片对象 -> 用collectionview显示-> 提交的时候递归上传array的image内容
然而这里就发现一个会吃内存的坑...
代理返回的UIImage对象 添加到array时,内存暴涨

其实也不是添加对象到array里导致的问题,因为我的collectionview 不reload 的话,图片不显示时 内存也是正常的,只有把这个image对象放置到UIImageView时 内存才会暴涨
因此怀疑是图片解码方面的原因:解码会调用到ram缓存,以便下次读取时不用再次解码
然而为了避免app占用ram过高而被系统kill掉,这个图片必须要处理一下
通过图片重新绘制得到UIImage这个占用内存的情况会消失
因此写个Category方法来简单处理一下就可以了
- (UIImage *)redraw{
CGFloat width = CGImageGetWidth(self.CGImage);
CGFloat height = CGImageGetHeight(self.CGImage);
// 创建一个bitmap的context
// 并把它设置成为当前正在使用的context
UIGraphicsBeginImageContext(CGSizeMake(width, height));
// 绘制图片大小设置
[self drawInRect:CGRectMake(, , width, height)];
// 从当前context中创建一个图片
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
// 使当前的context出堆栈
UIGraphicsEndImageContext();
// 返回新的改变大小后的图片
return image;
}
结果:

这篇不是干货,只是解决了一个小问题.
iOS App内存优化之 解决UIImagePickerController的图片对象占用RAM过高问题的更多相关文章
- iOS app内存分析套路
iOS app内存分析套路 Xcode下查看app内存使用情况有2中方法: Navigator导航栏中的Debug navigator中的Memory Instruments 一.Debug navi ...
- [原]unity3d ios平台内存优化(一)
关于内存优化,人云亦云 各有己见.本文将通过设置Strpping Level ,减少内存使用. 先看三幅图: 1.没做任何优化,默认选项 2.设置Stripping level 为 Use micro ...
- Android APP内存优化之图片优化
网上有很多大拿分享的关于Android性能优化的文章,主要是通过各种工具分析,使用合理的技巧优化APP的体验,提升APP的流畅度,但关于内存优化的文章很少有看到.在Android设备内存动不动就上G的 ...
- iOS app性能优化的那些事
iPhone上面的应用一直都是以流畅的操作体验而著称,但是由于之前开发人员把注意力更多的放在开发功能上面,比较少去考虑性能的问题,可能这其中涉及到objective-c,c++跟lua,优化起来相对 ...
- iOS App 性能优化总结
今天简单总结一些clientapp 优化的方案和方向. 我相信开发一个app大部分团队都能够完毕,可是性能久不一样啦,和我们都写一个冒泡算法一样,我相信每一个人写的冒泡算法都不一样,这些区别就带来了性 ...
- Facebook iOS App如何优化启动时间
http://www.cocoachina.com/ios/20160105/14870.html 提高 Facebook 应用的性能已经成为 Facebook 持续关注的领域.因为我们相信一个高性能 ...
- iOS APP性能优化
:应用启动时间 应用启动时,只加载启动相关的资源和必须在启动时加载的资源. :本地图片加载方式 本地图片加载常用方法有两种: a. [UIImage imageNamed:@"xx.png& ...
- 获取 iOS APP 内存占用的大小
当我们想去获取 iOS 应用的占用内存时,通常我们能找到的方法是这样的,用 resident_size: #import <mach/mach.h> - (int64_t)memory ...
- (Android图片内存优化)Picasso加载图片 教程。。详细版
Picasso 是 Android 上一个强大的图片下载和缓存库. 示例代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Picasso.with( ...
随机推荐
- selenium+python元素操作
1.判断元素的属性if i.get_attribute('type') == 'checkbox' 2.获取当前窗口的坐标 driver.get_window_position 获取当前窗口的长宽 d ...
- eclipse汉化教程,新手神器
网盘下载地址:http://pan.baidu.com/s/1i5ed6ZF 下载汉化包 将汉化包里的两个文件存放到eclipse安装目录中的dropins文件夹中 重启eclipse 汉化成功
- [BZOJ4008]亚瑟王
Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...
- win10 搜索不能使用解决方法
重装系统之后遇到一个问题,在搜索栏不能搜索到应用程序,Windows 10 Search can't find ANY applications. Even calculator - Super Us ...
- 微信支付生成带logo的二维码
利用到一个qrcode类 比较简洁 原作者没有加入二维码嵌入logo的功能 在这里我进行了小小的修改 可以实现生成微信支付二维码时打上logo 生成png格式的利用到该类中的png方法(我已经改好了) ...
- Thread初探
Thread初探 前言 以前大家写的都是单线程的程序,全是在main函数中调用方法,可以清楚的看到它的效率是特别低的,就像python中使用单线程取爬一个网站,可以说能让你等的吐血,因为数据量实在太大 ...
- 由SpringMVC中RequetContextListener说起
零.引言 RequetContextListener从名字结尾Listener来看就知道属于监听器. 所谓监听器就是监听某种动作,在其开始(初始化)和结束(销毁)的时候进行某些操作. 由此可以猜测:该 ...
- mybatis if test 解决页面 升序和降序的问题
<if test="status !=null and status !='' and status =='1'.toString()"> ORDER BY tag.c ...
- Java学习笔记--异常描述
异常描述 1.简介 为了全面了解"异常"的概念,先来分析一个实例.假定要编写一个Java程序,该程序读取用户输入的一行文本,并在终端显示该文本.这里是一个演示Java语言I/O功能 ...
- jquery 表格行计算
表格行计算 总金额: function jisuanTrJinE(obj){ var curTab = $(obj).closest("table"); var curTr = $ ...