我有一个应用程序使用UIImage
对象。到目前为止,我一直在使用使用如下方式初始化的图像对象:
UIImage *image = [UIImage imageNamed:imageName];
使用我的应用程序包中的图像。我一直在添加功能,以允许用户使用相机或其库中的图像UIImagePickerController
。显然,这些图像不能出现在我的应用程序包中,因此我初始化了UIImage
以不同的方式反对:
UIImage *image = [UIImage imageWithContentsOfFile:pathToFile];
这是在首先将图像大小调整为与我的应用程序包中的其他文件相似的大小(像素尺寸和总字节数)之后完成的,两者都使用 Jpeg 格式(有趣的是,即使文件大小相同,PNG 也要慢得多)。换句话说,文件指向pathToFile
是与捆绑中的图像大小相似的文件(像素尺寸匹配,并且选择了压缩,因此字节数相似)。
该应用程序通过一个循环从原始图像中制作小块,以及与本文无关的其他内容。我的问题是,使用第二种方式创建的图像进行循环比使用第一种方式创建的图像花费更长的时间。
我意识到第一种方法会缓存图像,但我认为这无关紧要,除非我不了解缓存的工作原理。如果是相关因素,如何在第二种方法中添加缓存?
导致瓶颈的相关代码部分是这样的:
[image drawInRect:self.imageSquare];
这里,self是UIImageView的子类。它的属性 imageSquare 只是一个CGRect
定义绘制的内容。这部分对于两种方法来说是相同的。那么为什么第二种方法在大小相似的情况下慢得多UIImage
object?
我可以采取不同的措施来优化这个过程吗?
编辑:我将对捆绑中图像的访问权限更改为imageWithContentsOfFile
执行循环的时间从大约 4 秒变为一分多钟。所以看来我需要找到一些方法来进行缓存imageNamed
可以,但是使用非捆绑文件。