2013-03-21 93 views
-4

我用imageNamed但是imageNamed会缓存你的图像,但是,使用imageWithContentsOfFile:来避免缓存。如何让这段代码更好?

而使用仪器,我看到,消耗大量的时间。 这怎么可能更好?

enter image description here

+6

请将实际的代码粘贴为文本,以便我们可以阅读。 – rmaddy 2013-03-21 18:07:54

+0

更不用说,它会显得好像你可以只使用for语句来遍历每个图像并将其添加到数组中。 – Josiah 2013-03-21 18:14:11

+0

改为将资源路径存储在数组中。然后抓住你需要的图像。 – AMayes 2013-03-21 18:17:18

回答

3

你可能误会什么仪器分析告诉你的。 4.3%的95%不是很多。这一切都取决于发生了什么。如果您没有经历严重的放缓,请不要进行不必要的优化!

然而,问自己的问题是您是否真的需要一组物理图像数据。它真的需要花时间将图像文件解压缩到它的UIImage数据位图中。 (更不用说你可以用这种方式运行自己的内存。)为什么不存储一串字符串(你的pathForResource字符串)并且只在需要时才获取图像?

最后,我会指出,我在这里看到一个模式:您正在获取图像13,然后是图像12,然后是图像11,依此类推。所以你手动执行这个操作的代码是非常愚蠢的,因为如果你告诉我索引号,我可以通过算法告诉你什么图像对应于它。

+0

谢谢!!这是在拍摄照片时模拟动画的图像。 – 2013-03-22 12:52:51

+0

可能考虑'animatedImageNamed:duration:' – matt 2013-03-22 15:22:32

0

你阅读这些文件,把它们解压缩,未压缩的版本分配内存,并将其存储在数组中。你需要所有的人吗?你可以一次加载它们而不是全部?这将减少初始化数组引起的重大打击。

此外,请确保您的图片不会比您实际显示的图片大。如果您只是在较小的区域中加载较大的图像,则需要较长的时间才能加载和解压缩该大图像。

0

尝试使用[NSBundle mainBundle] pathForResource来代替:......与此代码:

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; 

比如获得一些映像文件的路径

UIImage *img= [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@\myImage.png",bundleRoot]];