UIImage + NSCache 与 [UIImage imageNamed:]

Posted

技术标签:

【中文标题】UIImage + NSCache 与 [UIImage imageNamed:]【英文标题】:UIImage + NSCache vs. [UIImage imageNamed:] 【发布时间】:2012-02-17 10:55:46 【问题描述】:

我有一个性能问题,如果我从磁盘加载 JPG(是的,我无法在应用程序中提供任何 PNG 文件格式)图像[UIImage imageWithContentsOfFile: ],将 UIImage 存储在全局 NSCache 中并使用缓存图片在[UITableViewCell drawRect: ]。这种方式比用户[UIImage imagedNamed:]慢很多。

如果使用仪器“时间配置文件”分析了性能,并且如您在第一张图片中看到的那样,JPEG 总是在[DBArtistTableViewCell drawRect:] 中解码。 在带有[UIImage imageNamed:] 解决方案的第二张图片中,JPG 不会解压缩。

NSCache + UIImage 解决方法:

[UIImage imageNamed]解决方案

简短的问题是:为什么UIImage + NSCache 解决方案比[UIImage imageNamed:] 解决方案慢,[UIImage imageNamed:] 方法的魔力是什么(是的,我知道缓存,但其余的是什么?魔法) ?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我相信原因是UIImage imageNamed 导致数据被解压缩并存储在它的缓存中,而UIImage imageWithContentsOfFile 加载压缩数据,但直到您需要显示它时才解压缩。

【讨论】:

有没有办法自己从[UIImage imageWithContentsOfFile]解压UIImage? cmets 中有一些关于这个问题的讨论可能会对您有所帮助:***.com/questions/1815476/…

以上是关于UIImage + NSCache 与 [UIImage imageNamed:]的主要内容,如果未能解决你的问题,请参考以下文章

NSCache UIImage 数据从 oneViewController 传递到 anotherViewController

从 CMSampleBuffer 转换为 UIImage 对象

将 UIImage 保存为不同的名称

NSCache

SDWebImage总结

如何使用 NSCache