在iOS UIImage 加载图片性能分析文中对3中加载图片的性能进行了分析,但在之后的研究以及查找之后发现,上篇文章的分析并不是很全面。
整个图片加载包括两个过程,第一个是图片资源的加载,在文章中比较的性能其实就是资源加载性能;第二个是图片资源解码工作。下图是图片加载方法的timer profile统计结果。
1.加载Asset图片资源

2.[UIImage imageNamed:]加载逻辑目录资源

3.[UIImage imageWithContentsOfFile:]加载逻辑目录资源

统计结果
| 加载图片方式 | 加载图片资源耗时 | 图片解码耗时 |
| 加载Asset资源 | 59 | 37 |
| [UIImage imageNamed:]加载逻辑目录资源 | 413 | 155 |
| [Uiimage imageWithContentsOfFile:]加载逻辑目录资源 | 123 | 155 |
比较2,3方法,发现两个在图片资源解码的耗时一致,而Asset加载资源耗时非常少,说明苹果在Asset上除了优化资源时间之外,还对资源编解码方面做了很多工作,解码性能提升至23%。
系统在加载图片资源时,image一定要到imageView.image=image时,才会被解码,而且是由系统回调在主线程执行。网络上有方法可以将解码操作放在其他线程执行,主要的原理是通过将图片画在bitContext上,然后再读取图片。