iOS之YYImage的解析一

240 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

图片的加载

我们一般会使用imageWithNam:imageWithData:imageWithContentsOfFile来加载图片

  • imageWithName:对于经常使用的图片,我们推荐使用这个方法去加载,它会从系统内存中查找最适合当前分辨率的图片,如果cache中没有,该方法就会从磁盘或者Asset中加载土拍呢,当内存过载的时候,系统可能会清除image cache
  • imageWithContentsOfFile:这个方法不会缓存,每次都会去内存中加载,所以不推荐使用重复加载同一张图片。
  • imageWithData:同样不会缓存当前的image。

YYImage类结构分析

  • 图像层 UIImage YYImage,YYFrameImage,YYSpriteSheetImage
  • 视图层 UIImageView YYAnimatedImageView
  • 编/解码层 ImageIO.framework YYImageCoder

YYImage

上面我们讲了由于 imageWithName会全局缓存图片信息,所以YYImage子类重写了当前的imageName我们一起来看一下里面发生了什么?

截屏2022-04-19 下午9.03.10.png

截屏2022-04-19 下午9.03.21.png

截屏2022-04-19 下午9.03.33.png

YYImageDecoder

我们先来看看初始化方法

截屏2022-04-19 下午9.05.22.png

图片格式

首先,为大家普及一下图片的格式。
图片常见的格式有:GIF、PNG、JPEG、BMP、TIFF等。
其实每一个图片格式都有对应的十六进制数据(PS:当然十六进制也是从二进制转换过来的),也可以说就是这些十六进制数据组成了一张图片,然后再通过计算机内部的渲染等一系列算法从而显示了一张图片,而往往前面的4~8个字节往往都代表了这张图片的格式。
如:
89 50 4E 47 0D 0A 00 00 ... ... ... ...
前面的4个字节(89 50 4E 47)的ASCII对应的就是'.''P''N''G';
再比如:
47 49 46 38 39 61 64 00 ... ... ...
前面的4个字节的ASCII对还有那个的就是‘G’‘I’‘F’‘8’

截屏2022-04-19 下午9.13.01.png

截屏2022-04-19 下午9.13.38.png

截屏2022-04-19 下午9.14.51.png