前言
今天在南峰子的技术博客上看了一篇关于UIKit:UIImage的文章,从中又回顾和学习了不少跟UIImage有关的知识内容,把重要的知识点记录下,方便以后能会好的回忆起相关UIImage的技术点.
内容
知识点一. UIImage的线程安全
文章提到UIImage的不可变性:
UIImage一旦创建,就不能再改变它的属性,只能在初始化方法中提供属性值或者依赖图片自身的属性.
这个特性意味着在任何线程UIImage都可以安全地使用.而需要对UIImage的图像进行处理时,需要做的就是利用下面的方法获得图像二进制数据再自定义创建一个图像副本.
UIImageJPEGRepresentation(UIImage * _Nonnull image, CGFloat compressionQuality)
// compressionQuality 针对JPEG有损压缩的质量系数: 0.0(low)~1.0(high)
UIImagePNGRepresentation(UIImage * _Nonnull image)
知识点二. 创建UIImage的注意点
使用二进制数据和imageNamed
创建UIImage对象时和,系统会对图片数据在内存上进行缓存.
使用imageNamed
创建UIImage对象,默认main nundle处加载.但其会优先在系统缓存中寻找相同名字的图片,若没有找到就从asset catalog和沙盒里查找.
内存上的图像数据缓存只有在内存警告时才会被自动清除,因此往往消耗着一定的内存.所以针对使用频率较低的图片可以使用文件路径加载的方式imageWithContentsOfFile
创建.(但也要同时考虑读写操作的性能消耗)
知识点三. 关于图片的拉伸
常用方法: resizableImageWithCapInsets:resizingMode:
自iOS6之后,图片拉伸模式分为平铺和常规拉伸(默认行为).这里的平铺模式表示用指定矩形区域进行重复填充图片.而矩形区域由UIEdgeInsets
设定,一个需要设置固定顺序的Top,Left,Bottom,Right的Rect结构体.
知识点四. iOS/OSX支持的图片格式
总结
对于技术的进步,最好的方法就是不断地坚持,利用好自己的实践,多看看优秀的文章和代码,去学习去思考.