【发布时间】:2013-03-11 09:36:52
【问题描述】:
【问题讨论】:
-
请将实际代码粘贴为文本,以便我们阅读。
-
更不用说,看起来好像您可以使用 for 语句循环遍历每个图像并将其添加到数组中。
-
将资源路径存储在数组中,而不是。然后根据需要抓取图像。
标签: ios objective-c instruments
【问题讨论】:
标签: ios objective-c instruments
您正在读取所有这些文件,解压缩它们,为未压缩版本分配内存,并将它们存储在数组中。你需要所有这些吗?您可以按需加载它们而不是一次全部加载吗?这将减少初始化数组造成的大冲击。
此外,请确保您的图片不大于实际显示的大小。如果您加载大图像只是为了在小区域内显示它,则加载和解压缩该大图像将花费更长的时间。
【讨论】:
尝试使用以下代码替换 [NSBundle mainBundle] pathForResource:...:
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
例如获取一些图片文件路径
UIImage *img= [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@\myImage.png",bundleRoot]];
【讨论】:
您可能误解了 Instruments 分析告诉您的内容。 4.3%的95%不算多。这一切都取决于发生了什么。如果您没有遇到严重的减速,请不要进行不必要的优化!
不过,要问自己一个问题,您是否真的需要一组物理图像数据。将图像文件解压缩到其 UIImage 数据位图中确实需要很长时间。 (更不用说你可以通过这种方式耗尽内存。)为什么不存储一个字符串数组(你的 pathForResource 字符串)并仅在需要时获取图像?
最后我要指出,我在这里看到了一个模式:您正在获取图像 13,然后是图像 12,然后是图像 11,依此类推。因此,您手动执行此操作的代码非常愚蠢,因为如果您告诉我索引号,我可以通过算法告诉您对应的图像是什么。
【讨论】:
animatedImageNamed:duration: