简介

对于大多数App来说,内存占用主要就是图片。本文将从实用的角度分析,iOS图片的内存占用、测量、优化等。

iOS内存-有什么影响

在移动操作系统设备中,是不能像PC一样进行内存swap的,而随着用户的实用,打开的应用越来越多,应用使用的内存也越来越多。当占用的内存达到某个临界值时,iOS系统会尝试按照优先级逐个kill掉应用程序,以维护系统的流畅和稳定。

当iOS系统在清理内存过程中,优先级到了前台正在运行的应用程序,那么就会出现前台应用程序闪退的现象,也就是通常所说的OOM。

iOS内存-关注什么

实际上,对于iOS系统内存,根据划分的方法方式,有很多内存种类,比较常见的有clean memory, dirty memory,有virtual memory, resident memory,等等。那么这么多的内存,重点要关注什么呢?For the purposes of this guide, Persistent Bytes for All Heap & Anonymous VM represents your app's memory footprint.

这句话来自苹果的官方技术文档,翻译过来就是,在内存优化中,需要关注的memory footprint就是“Persistent Bytes for All Heap & Anonymous VM”。也就是下图中instruments-Allocation中的①。至于提到的memory footprint,可以参考wiki。

也就是说,iOS内存优化看“memory footprint”,“memory footprint”优化看“Persistent Bytes for All Heap & Anonymous VM”

iOS内存-图片内存怎么算

先打一个比喻,我们平时为了传输方便,往往会对文件进行压缩,得到一个.rar或者.zip的压缩包,当我们要阅读文件时,需要先解压压缩包,得到.doc或者.txt等文档,然后再打开阅读。

类似的,我们平时看到的.jpg,.png,就是上面所说的压缩包,这个文件是不能直接上屏渲染的,需要先解压缩,然后才能在上屏。而我们平时无感知,直接打开文件就能看,是因为解码渲染很快,在你点击的时候就完成了解码+渲染的操作了,类似.zip压缩包也可以不解压直接预览一样。

那么显而易见,我们看到的磁盘上的图片和最终渲染出来的图片是不同的,那么图片实际加载渲染时的内存要怎么算呢。在iOS中可以通过以下公式快速计算。其中4是每个像素占用的byte,在iOS中固定为4(至少目前为止是的),Android中需要根据实际的调整,一般也是4。内存大小=像素宽*像素高*4

iOS内存-图片内存怎么取

如果要进行图片内存的优化,首先得保证能监测到图片的内存大小。图片内存的测量,各家有各家的方案,但是总的来说,都是在某个或多个图片加载的入口,进行侵入或非侵入AOP,进行相关的计算。

这里推荐一个方法,实用NSHashtable,弱引用持有对象。将图片的对象放到这个弱引用的hash表中,可以实时查看当前仍存活的所有图片对象,并据此计算图片占用的内存。

iOS中UIImage内存占用:UIImage内存占用大小:image.size.width*image.size.height*image.scale

iOS内存-图片内存优化

iOS图片内存优化,大的方向就是:少用,勤释放

就是在页面中同时加载的图片数量要少,单张图片的大小要小,图片占用的内存要勤释放,用CPU换内存。

一个典型的优化就是,UITableView中,cell的reuse。单个cell的高度推荐小于1屏,cell要能够重用,列表滚动时,cell中的图片按需加载和释放。能够做到这些,一般的图片内存问题都能够很好的解决。

iOS内存-图片按需加载

目前流行的图片加载,都会选取CDN,将原图进行初步的压缩,然后加载,但是这个更多的考虑的是服务的的性能,负载均衡等等,客户端的收益基本就只有流量一条。客户端内存的优化微乎其微。

根据上面说的图片内存解释,我们知道图片内存暴涨就是在对其解压缩时。如果看过iOS最流行的图片加载框架SDWebImage,和腾讯开源图片框架LKImageKit,可以发现LKImageKit有一个很精细的图片加载优化,就是在图片解码时,根据加载图片的view的frame,进行解码。这样就避免了一个很小的view,加载一张很大的图片,消耗大量内存的情况。

在SDWebImage中,要实现这个feature会有点麻烦。需要将上层调用的frame透传到最下面的解码部分,且需要做一些错误校验。

此外,需要注意的是,压缩率比较高的图片,在进行这种二次压缩时,压缩后的图片有可能会有很严重的失真。作者:斯瑞德

链接:https://www.jianshu.com/p/6934d0bdb8ae

ios 图片加载内存尺寸_iOS内存分析上-图片加载内存分析相关推荐

  1. IOS 类似抖音下拉刷新与自定义上拉加载

    IOS 类似抖音下拉刷新与自定义上拉加载 最近UICollectionView中使用了pageEnabled,MJRresh直接使用时出现偏移.这里就暂时考虑简单的做法. 首先考虑在UICollect ...

  2. android 加载更多动画效果,Android实践之带加载效果的下拉刷新上拉加载更多

    前言 之前写的一个LoadingBar,这次把LoadingBar加到下拉刷新的头部.从头写一个下拉刷新,附赠上拉加载更多.下面话不多说了,来一起看看详细的介绍吧. 效果图: 实现过程 首先是自定义属 ...

  3. android 列表上拉加载更多,Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView...

    麦洛遇到这样一个需求,实现类似于IOS下拉刷新,上拉加载更多的控件.麦洛google,baidu了一番,网上有不少实现,比较常见的是国外牛人的实现,不过国外的实现基本上都是扩展于ListView,所以 ...

  4. 移动端 懒加载、下拉刷新、上拉加载

    优势:提升性能 实现原理:图片是通过img的src属性,当对src赋值时,浏览器就会请求图片资源. 基于这个问题,我们可以利用标签的自定义属性(data-xxx),来保存图片的路径,当我们需要加载图片 ...

  5. ios 图片加载内存尺寸_iOS加载超清大图内存暴涨问题解决

    加载超清大图是会引起内存爆表的问题,最近一直困扰着我. SDWebImage在加载大图时做的不是很好,加载大图内存爆表.YYWebImage会好一点,但还是不行. 当不要求图片质量的情况下,最好是在上 ...

  6. java ueditor 图片上传加水印_关于ueditor多图上传加水印

    最近小二哥应运营要求,需在后台编辑器做图片添加水印功能,由于ueditor编辑器本身没有添加水印的功能: 所以小二哥参考了网上的一些方法,加上实现的步骤整理成文档,希望对需要的人有帮助. 1.打开ue ...

  7. nginx 跨服务器显示图片,centos6.6下nginx配置远程服务器上图片访问

    将远程图片服务器挂载到Nginx所在服务器上,然后在Nginx上配置访问. 步骤 两台服务器信息如下: 服务器名称 服务器IP 共享目录 服务器说明 A 10.100.1.10 /mnt/data N ...

  8. tableview插入刷新_iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码...

    废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" ...

  9. 基于iSroll 5.0实现的上拉加载和下拉刷新插件

    Updownload.js 基于iSroll 5.0实现的上拉加载和下拉刷新插件 移动端效果比较好,开发者工具打开后,需要刷新下页面. [演示地址:] https://chenyk2016.githu ...

最新文章

  1. dojo中 xhr.post向后台传参出现乱码
  2. 零基础学Python:函数的参数详解
  3. Delphi利用MSCOMM控件进行GPS数据采集
  4. 搜索引擎设计实用教程(2)-以百度为例
  5. 代码规范(一)——java篇
  6. [pytorch、学习] - 3.10 多重感知机的简洁实现
  7. 数据库---查询(详细)
  8. app engine_App Engine中的Google Services身份验证,第2部分
  9. python tkinter pack 同一行_用python tkinter中的一行连接2个复选按钮
  10. 程序员面试题100题第28题——全排列
  11. 5G网络出现打乱传统网络范式,AI驱动+区块链能搞出啥新花样?
  12. 高性价比运维工具推荐
  13. 历史的天空-【1】配置
  14. 如何测试网页的登录页面(转载)
  15. python打印列表的下标和值的例子:
  16. 醋醋SEO基础入门教程_seo入门基础知识
  17. jpa 动态查询条件 数组_利用JPA+querydsl实现多条件动态查询
  18. BZOJ 4008: [HNOI2015]亚瑟王
  19. PDF如何解密?这些方法你知道吗?
  20. 梦想还是要有的,万一实现了呢?

热门文章

  1. 腾讯区块链的三年与它的打法
  2. 计算机基本防范技术教案,电脑病毒处处防 教案(华科版信息技术上册)
  3. 谈谈对数据治理的理解
  4. matlab 求对称,matlab-线性代数 判断 矩阵的对称、实对称、反对称
  5. 泉州地区的“会子”是一种怎样的制度?
  6. 各大浏览器兼容性报告 IE、FF、Safari、OP不同浏览器兼容报告
  7. java 判断是否是罗马_如何只使用正则表达式匹配有效的罗马数字?
  8. docker build 时出现no space left on device解决方法
  9. 浏览器-网页标题的图标
  10. jQuery 下载保存图片的方法