文档章节

ios内存优化(转载)

Lambda8421
 Lambda8421
发布于 2015/02/28 10:46
字数 509
阅读 488
收藏 0
点赞 0
评论 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
闸北
程序员
cocos2d-x与ios内存管理分析(在游戏中减少内存压力)

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

智捷课堂
2015/08/13
0
0
IOS12开发者预览版第二版使用评测

     手头有一部iPhone 6s Plus,因为之前看同学和朋友们升到IOS 11后手机变得非常卡顿所以没有升级。最近偶然看到IOS 12针对旧机型做了性能优化,号称提升70%相机打开速度、50%键盘显示...

张旭乾
06/23
0
0
如何在Electra越狱的设备上使用LLDB调试应用程序

        在3月18日的时候,我就曾发表过一篇关于在Electra越狱的设备上使用LLDB调试应用程序的文章。本文我将在此基础上,做进一步的更新优化。   我试图在google搜索,有关使用Ele...

FreeBuf
05/29
0
0
iOS精美过度动画、视频会议、朋友圈、联系人检索、自定义聊天界面等源码

iOS精选源码 iOS 精美过度动画源码(http://www.code4app.com/thread-14827-1-1.html) iOS简易聊天页面以及容联云IM自定义聊天页面的实现思路(http://www.code4app.com/thread-30348-1-1.htm...

sunnyaigd
07/11
0
0
Xcode的Architectures和Valid Architectures的区别,以及st...

作者:shede333 主页:http://my.oschina.net/shede333 版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 [Creative Commons BY-NC-ND 3.0][] --- [Creative Commons BY-NC-...

shede333
2013/10/29
0
1
如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊
05/26
0
0
iOS高仿QQ侧滑控件、下载框架、动画效果、扫一扫、颜色变化、K线图等源码

iOS精选源码 仿京东"加入购物车"转场动画(http://www.code4app.com/thread-28162-1-1.html) ColorTool(颜色转换)(http://www.code4app.com/thread-29256-1-1.html) Swift 专业版K线(http://w......

sunnyaigd
04/17
0
0
转:基于IOS上MDM技术相关资料整理及汇总

一、MDM相关知识: MDM (Mobile Device Management ),即移动设备管理。在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入企业网络并查...

移动互联百科
2013/10/06
0
0
[北京望京][15K-20K] 掘金招聘 iOS 开发

号外!号外!iOS 工程师又有人要啦! 望京 SOHO,望京 SOHO,iOS 工程师招聘了 你你你不来不来参加参加,你快投快投简历啊 不用犹豫了,我们等的就是你! ̋(ˊᵒ̴̶̷̤ ꇴ ᵒ̴̶̷̤ˋ)...

稀土君
07/11
0
0
Apple IOS、Android、WebOS系统体系架构对比

2月10日,HP发布了WebOS3.0,虽然有些生不逢时,但即使面对不成熟的Windows phone7,尚待字闺中的meego, 移动设备操作系统中Apple IOS、Android、WebOS三足鼎立的局面已然初成,。竞争的大幕...

人十车
2011/02/12
0
5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CentoOS6.6安装netcat

CentOS下安装netcat 使用zookeeper过程中,需要监控集群状态。在使用四字命令时(echo conf | nc localhost 2181),报出如下错误:-bash: netcat: command not found。 我的系统是CentOS 6....

ghou-靠墙哭
6分钟前
0
0
es6之解构赋值巧用

ES6 允许按照一定模式,从数组、对象等中提取值,对变量进行赋值,这被称为解构赋值。 如何进行解构赋值我这里就不赘述,本篇文章主要是将解构赋值的巧妙使用之处。 1、交互变量的值 常用交互...

秋季长青
11分钟前
0
0
Elasitcsearch High Level Rest Client学习笔记(三)批量api

Bulk Request BulkRequest可以在一起从请求执行批量添加、更新和删除,至少需要添加一个操作 BulkRequest request = new BulkRequest(); //创建BulkRequestrequest.add(new IndexRequest("...

木子SMZ
15分钟前
0
0
mybatis-dynamic sql

OGNL expressions if 判断是否存在值 <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{tit......

writeademo
22分钟前
0
0
社交系统ThinkSNS+ V1.8.3更新播报

     研发发布版本号:1.8.3   本次版本于2018年7月16日发布   本次发布类型:新增功能、细节调整与优化   社交系统ThinkSNSPlus更新体验:请于官网下载/安装最新版或联系QQ35159...

ThinkSNS账号
25分钟前
0
0
教育思考:选择编程是一场父母和孩子的和解[图]

教育思考:选择编程是一场父母和孩子的和解[图]: 之前有个很热的段子是这样讲的:深夜十点的时候,某小区一女子大声喊叫“什么关系?啊?!到底什么关系?你说!”最后发现原来是一位妈妈陪...

原创小博客
26分钟前
0
0
X64汇编之指令格式解析

最近由于项目组内要做特征码搜索的东西,便于去Hook一些未导出函数,你懂得...于是就闲着学习了一下x86/x64的汇编指令格式。x86的汇编指令格式请参照http://bbs.pediy.com/showthread.php?t...

simpower
29分钟前
0
0
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html 基本数据类型 i8,i16,i32,i64,i128 u8,u16,u32,u64,u128 f32,f64 char bool:true...

捍卫机密
32分钟前
0
0
JS中严格模式和非严格模式

1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通...

AndyZhouX
32分钟前
0
0
Nginx配置error_page 404 500等自定义的错误页面

Nginx 做web server时, 开发中发现有时候的网站代码有错误,我们需要跳转到一个指定内容的错误页面: 1. 在nginx.conf配置文件上加上一句: fastcgi_intercept_errors on; 2. 服务中加上: er...

MichaelShu
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部