在iOS开发中,图片(UIImage)是我们在开发中,占用手机内存
比较大的对象,如果在运行过程中,内存占用过大,对电池寿命
会造成影响,如果超过了内存占用的最大值
,会造成App的crash
。这篇文章从图片的加载
原理和SDWebImage
的源码实现的角度来介绍图片加载。
图片的渲染流程
在iOS中使用 UIImage
和UIImageView
来记载图片,他俩遵守经典的MVC
架构,UIImage
相当于Model
,UIImageView
相当于View
:
UIImage
负责加载图片
,UIImageView
负责渲染图片
。
图片的渲染流程分为3个阶段
:加载(Load),解码(Decoder)和渲染(Render)
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:834688868,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
如果你正在面试,或者正准备跳槽不妨动动小手,添加一下咱们的交流群:834688868来获取一份详细的大厂面试资料 为你的跳槽加薪多一份保障
在每个阶段都会有相对应的缓冲区
:数据缓冲区(DataBuffer),图像缓冲区(imageBuffer)和帧缓冲区(framebuffer)
。
我们以加载一个图片的尺寸为:2048 px * 1536 px
,在磁盘上的大小为:590kb
的图片为例,来分析前两个阶段的缓冲区。
DataBuffer
DataBuffer
只是一种包含一系列字节
的缓冲区。通常以某些元数据<