文档章节

IOS 内存占用问题之 ImageIO_PNG_Data

陈圣晗
 陈圣晗
发布于 2015/06/18 15:35
字数 339
阅读 158
收藏 0

iOS 内存占用问题之ImageIO_PNG_Data

问题来源

做APP调试的时候,发现总是收到 didReceiveMemoryWarning,打开 Instruments 的 Memory Leaks 一看,ImageIO_PNG_Data占了好大的内存(近100MB)。

其实这个问题零零碎碎地在很多地方都有人提到过,但是提到ImageIO_PNG_Data似乎不多,碰到问题的时候不好搜索,这里着重提一下。

问题分析

这篇文章里提到了关于图片缓存的问题,看起来和我们碰到的这个问题有关。

具体来说,就是我们通常会用两种方式加载图片:

UIImage *img = [UIImage imageNamed:@"myImage"]; // caching
// or
UIImage *img = [UIImage imageWithContentsOfFile:@"myImage"]; // no caching

根据苹果官方参考:

If you have an image file that will only be displayed once and wish to ensure that it does not get added to the system’s cache, you should instead create your image using imageWithContentsOfFile:. This will keep your single-use image out of the system image cache, potentially improving the memory use characteristics of your app.

  • imageNamed: 会将图片加载到系统缓存,适合需要重复利用的图片,提高加载速度

  • imageWithContentsOfFile: 不会将图片加载到系统缓存,适合不重复利用的图片

问题解决

  • 检查使用到 imageNamed: 的地方,根据需求场景,将不必要缓存的部分全部替换为 imageWithContentsOfFile:,会发现ImageIO_PNG_Data的内存占用瞬间就降下来了。

© 著作权归作者所有

共有 人打赏支持
陈圣晗
粉丝 5
博文 12
码字总数 7377
作品 2
闵行
私信 提问
iOS 处理图片的一些小 Tip

https://blog.ibireme.com/2015/11/02/iosimagetips/ 如何把 GIF 动图保存到相册? iOS 的相册是支持保存 GIF 和 APNG 动图的,只是不能直接播放。用 [ALAssetsLibrary writeImageDataToSav...

壹峰
2018/10/15
0
0
React Native VS Flutter评测

React Native VS Flutter评测 编辑于 11:34

纪洪波
2018/06/27
0
0
iOS的5种图片缩略技术以及性能探讨

图像是每个应用程序不可缺少的一部分。调整图像大小是所有开发人员经常遇到的问题。iOS有5中图片缩略技术,但是我们应该在项目中选择哪种技术呢?尤其是面对高精度图片的缩略时,方式不当可能...

云上飞飞
2018/06/29
0
0
iOS与JS交互之WKWebView-WKScriptMessageHandler协议

级别:★★☆☆☆ 标签:「iOS与JS交互」「WKWebView与JS交互」「WKJSMessageHandler」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
2018/09/02
0
0
关于Android流畅度不如iOS的几点看法

网上一名据称是前谷歌实习生的人透露了一些关于Android系统硬件加速的内幕。据称,在 Android3.0和4.0之前,并没有完整的硬件加速。他们一直在通过硬件加速绘制某些UI元素,并称效果并不像他...

虫虫
2011/12/17
21.3K
28

没有更多内容

加载失败,请刷新页面

加载更多

分布式之数据库和缓存双写一致性方案解析

为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 ![] 但是在更新缓存方面,对于更新...

hensemlee
26分钟前
1
0
怎么学习大数据

最近有很多人在找,大数据是怎么学?需要学什么技术以及这些技术的学习顺序是什么?今天有时间我把个问题总结成文章分享给大家。 那大数据处理技术怎么学习呢?首先我们要学习Java语言和Lin...

董黎明
26分钟前
0
0
MySQL 常用数据存储引擎区别

mysql有多种存储引擎,目前常用的是 MyISAM 和 InnoDB 这两个引擎,除了这两个引擎以为还有许多其他引擎,有官方的,也有一些公司自己研发的。这篇文章主要简单概述一下常用常见的 MySQL 引擎...

吴伟祥
29分钟前
0
0
MySQL学习笔记之三排序和过滤

在数据库的使用中排序和过滤也是经常的操作 排序检索数据,关键字order ##1.按照某个列名排序 普通排序mysql> select * from user;+----+--------+-----+-----------------------+-----+|...

凌宇之蓝
33分钟前
0
0
编译GDAL2.3.0的C#接口

编译完GDAL和JAVA接口后,如果需要使用C#调用,就需要编译C#的接口。方法如下: 注意:使用的SWIG版本不能使用太高版本,否则,会报一堆的类型未找到的错误,我是无从下手。使用swig2.0.7(据...

会哭的鳄鱼
34分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部