一起养成写作习惯!这是我参与「掘金日新计划 · 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
我们一起来看一下里面发生了什么?
YYImageDecoder
我们先来看看初始化方法
图片格式
首先,为大家普及一下图片的格式。
图片常见的格式有: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’