2012-02-17 99 views
3

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

如果已经分析用仪器的性能“时间档案”,正如你可以在第一个图片中看到的JPEG在[DBArtistTableViewCell drawRect:]总是解码。 在第二张图片[UIImage imageNamed:]解决方案中,JPG不会解压。

NSCache + UIImage解决方案: NSCache + UIImage

[UIImage imageNamed]解决方案 UIImage imageNamed

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

THX的帮助。

回答

3

我相信原因是UIImage imageNamed使数据进行解压缩并存储在它的高速缓存,而UIImage imageWithContentsOfFile载荷的压缩数据,但直到你需要显示它并没有解压缩。

+0

有没有办法通过自己解压从[UIImage的imageWithContentsOfFile]的UIImage的? – CarlJ 2012-02-17 11:59:46

+1

即使世界在这个问题上的意见,可以帮助您进行一些讨论:http://stackoverflow.com/questions/1815476/cgimage-uiimage-lazily-loading-on-ui-thread-causes-stutter – ikuramedia 2012-02-18 03:55:17