文档章节

ios内存优化(转载)

Lambda8421
 Lambda8421
发布于 2015/02/28 10:46
字数 509
阅读 511
收藏 0

iOS内存优化

从原型到产品的阶段,我们总会遇到一些内存优化的问题。我的app运行很卡,然后我在instrument上查看对象的内存占用情况,当我加载 到UICollectionView容器时,发现在Allocations内存分配栏目,lifespan的created&still living栏目中有一项ImageIO_PNG_Data占用了100M以上的内存,但是显示的图片只有6张,真是太奇怪了。首先我怀疑,是图片没有压缩,然后我用原生的方法把图片压缩到512K以内,

+(NSData*)compressImage:(UIImage*)image{ CGFloat compression = 0.9f; CGFloat maxCompression = 0.1f; /** * 512kb */ int maxFileSize = 512*1024; NSData *imageData = UIImageJPEGRepresentation(image, compression); while ([imageData length] > maxFileSize && compression > maxCompression) { compression -= 0.1; imageData = UIImageJPEGRepresentation(image, compression); } return imageData; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+ ( NSData * ) compressImage : ( UIImage * ) image {
     CGFloat compression = 0.9f ;
     CGFloat maxCompression = 0.1f ;
     /**
     *  512kb
     */
     int maxFileSize = 512 * 1024 ;
     NSData *imageData = UIImageJPEGRepresentation ( image , compression ) ;
     while ( [ imageData length ] > maxFileSize && compression > maxCompression )
     {
         compression -= 0.1 ;
         imageData = UIImageJPEGRepresentation ( image , compression ) ;
     }
     return imageData ;
}

但是,问题貌似,还是没有解决。后来我终于发现,是UIImageJPEGRepresentation这个方法,让UIImage 与 NSdata相互转化的时候室是有损耗的,所以我们在NSCoding,序列化对象的时候选用NSData,而不是UIImage。经验,永远不要把 UIImage放在数组里,性能非常差,就算我把图片压缩得返回的是NSData,但是转化成UIImage并存到对象数组里面以后几乎等于没有压 缩!NSData系统默认就已经序列化(NSCoding协议),每次要用到UIImage就这样去调用[UIImage imageWithData:imageData]。这样做以后,就算有30张图片内存的占用也就十几兆的样子。

后来还有个笑话,当我在虚拟机上运行的时候,有个叫ImageIO_JPEG_Data的东西又占了很大的内存,看图

2014-08-23_19-47-27然后我开始调试,过了四个钟头,我满头大汗,在stackoverflow上也没找到答案,后来我在真记上测试,一切又正常了,WTF!不要相信虚拟机,Xcode对虚拟机和真机在内存分配上不是一回事…………

 

本文转载自:http://www.hlyu.cn/?p=177

共有 人打赏支持
Lambda8421
粉丝 10
博文 121
码字总数 121640
作品 0
闸北
程序员
私信 提问
C++ fstream/ifstream/ofstream文件读写操作

版权声明:本文为博主 一銤阳光 学习整理的文章,如需转载,请注明出处、附上CSDN博文链接。 https://blog.csdn.net/CSDNhuaong/article/details/85281404 文章目录 写在前面 在C++中,对文件...

一銤阳光
2018/12/27
0
0
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
苹果发布 iOS 9.2 正式版:多项功能增强、改进

除了发布 OS X 10.11.2 和 tvOS 9.1 正式版外,苹果今天还发布了 iOS 9.2 正式版。iOS 9.2 是自 iOS 9 在今年9月发布之后的第二次重大版本更新。iOS 9.2 测试开始于10月底,开发者和公测用户...

oschina
2015/12/09
3.8K
22
iOS涂色涂鸦效果、Swift仿喜马拉雅FM、抽屉转场动画、拖拽头像、标签选择器等源码

iOS精选源码 LeeTagView 标签选择控件(http://www.code4app.com/thread-31033-1-1.html) 为您的用户显示界面添加美观的加载视图(http://www.code4app.com/thread-31038-1-1.html) Swift4: 可......

sunnyaigd
2018/09/19
0
0
cocos2d-x与ios内存管理分析(在游戏中减少内存压力)

Cocos2d-x与ios内存管理分析(在游戏中减少内存压力) 猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢! 年 原文地址: http://www.cocos2dev.com/?p=281 注:自己...

智捷课堂
2015/08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
23分钟前
1
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
35分钟前
0
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
今天
1
0
解决SVN:E210007无法协商认证机制

svn:E210007 svn: Cannot negotiate authentication mechanism 执行下面代码即可 sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-ldap...

临江仙卜算子
今天
1
0
java8的时间和`Date`的对比

java8的时间和Date的对比 java8提供了新的时间接口。相对Date,Calendar,个人感觉最大的好处是对时间操作的学习成本很低,比Calendar低。 1. LocalDate,LocalTime,LocalDateTime LocalDate 代...

北风刮的不认真了
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部