ios 图片加载内存尺寸_iOS内存分析上-图片加载内存分析
简介
对于大多数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内存分析上-图片加载内存分析相关推荐
- IOS 类似抖音下拉刷新与自定义上拉加载
IOS 类似抖音下拉刷新与自定义上拉加载 最近UICollectionView中使用了pageEnabled,MJRresh直接使用时出现偏移.这里就暂时考虑简单的做法. 首先考虑在UICollect ...
- android 加载更多动画效果,Android实践之带加载效果的下拉刷新上拉加载更多
前言 之前写的一个LoadingBar,这次把LoadingBar加到下拉刷新的头部.从头写一个下拉刷新,附赠上拉加载更多.下面话不多说了,来一起看看详细的介绍吧. 效果图: 实现过程 首先是自定义属 ...
- android 列表上拉加载更多,Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView...
麦洛遇到这样一个需求,实现类似于IOS下拉刷新,上拉加载更多的控件.麦洛google,baidu了一番,网上有不少实现,比较常见的是国外牛人的实现,不过国外的实现基本上都是扩展于ListView,所以 ...
- 移动端 懒加载、下拉刷新、上拉加载
优势:提升性能 实现原理:图片是通过img的src属性,当对src赋值时,浏览器就会请求图片资源. 基于这个问题,我们可以利用标签的自定义属性(data-xxx),来保存图片的路径,当我们需要加载图片 ...
- ios 图片加载内存尺寸_iOS加载超清大图内存暴涨问题解决
加载超清大图是会引起内存爆表的问题,最近一直困扰着我. SDWebImage在加载大图时做的不是很好,加载大图内存爆表.YYWebImage会好一点,但还是不行. 当不要求图片质量的情况下,最好是在上 ...
- java ueditor 图片上传加水印_关于ueditor多图上传加水印
最近小二哥应运营要求,需在后台编辑器做图片添加水印功能,由于ueditor编辑器本身没有添加水印的功能: 所以小二哥参考了网上的一些方法,加上实现的步骤整理成文档,希望对需要的人有帮助. 1.打开ue ...
- nginx 跨服务器显示图片,centos6.6下nginx配置远程服务器上图片访问
将远程图片服务器挂载到Nginx所在服务器上,然后在Nginx上配置访问. 步骤 两台服务器信息如下: 服务器名称 服务器IP 共享目录 服务器说明 A 10.100.1.10 /mnt/data N ...
- tableview插入刷新_iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码...
废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" ...
- 基于iSroll 5.0实现的上拉加载和下拉刷新插件
Updownload.js 基于iSroll 5.0实现的上拉加载和下拉刷新插件 移动端效果比较好,开发者工具打开后,需要刷新下页面. [演示地址:] https://chenyk2016.githu ...
最新文章
- dojo中 xhr.post向后台传参出现乱码
- 零基础学Python:函数的参数详解
- Delphi利用MSCOMM控件进行GPS数据采集
- 搜索引擎设计实用教程(2)-以百度为例
- 代码规范(一)——java篇
- [pytorch、学习] - 3.10 多重感知机的简洁实现
- 数据库---查询(详细)
- app engine_App Engine中的Google Services身份验证,第2部分
- python tkinter pack 同一行_用python tkinter中的一行连接2个复选按钮
- 程序员面试题100题第28题——全排列
- 5G网络出现打乱传统网络范式,AI驱动+区块链能搞出啥新花样?
- 高性价比运维工具推荐
- 历史的天空-【1】配置
- 如何测试网页的登录页面(转载)
- python打印列表的下标和值的例子:
- 醋醋SEO基础入门教程_seo入门基础知识
- jpa 动态查询条件 数组_利用JPA+querydsl实现多条件动态查询
- BZOJ 4008: [HNOI2015]亚瑟王
- PDF如何解密?这些方法你知道吗?
- 梦想还是要有的,万一实现了呢?
热门文章
- 腾讯区块链的三年与它的打法
- 计算机基本防范技术教案,电脑病毒处处防 教案(华科版信息技术上册)
- 谈谈对数据治理的理解
- matlab 求对称,matlab-线性代数 判断 矩阵的对称、实对称、反对称
- 泉州地区的“会子”是一种怎样的制度?
- 各大浏览器兼容性报告 IE、FF、Safari、OP不同浏览器兼容报告
- java 判断是否是罗马_如何只使用正则表达式匹配有效的罗马数字?
- docker build 时出现no space left on device解决方法
- 浏览器-网页标题的图标
- jQuery 下载保存图片的方法