【问题标题】:How could make this code better? [closed]如何使这段代码更好? [关闭]
【发布时间】:2013-03-11 09:36:52
【问题描述】:

我使用了 imageNamed,但是 imageNamed 会缓存你的图片,使用 imageWithContentsOfFile: 来避免缓存。

我发现使用工具会消耗大量时间。 这怎么可能更好?

【问题讨论】:

  • 请将实际代码粘贴为文本,以便我们阅读。
  • 更不用说,看起来好像您可以使用 for 语句循环遍历每个图像并将其添加到数组中。
  • 将资源路径存储在数组中,而不是。然后根据需要抓取图像。

标签: ios objective-c instruments


【解决方案1】:

您正在读取所有这些文件,解压缩它们,为未压缩版本分配内存,并将它们存储在数组中。你需要所有这些吗?您可以按需加载它们而不是一次全部加载吗?这将减少初始化数组造成的大冲击。

此外,请确保您的图片不大于实际显示的大小。如果您加载大图像只是为了在小区域内显示它,则加载和解压缩该大图像将花费更长的时间。

【讨论】:

    【解决方案2】:

    尝试使用以下代码替换 [NSBundle mainBundle] pathForResource:...:

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

    例如获取一些图片文件路径

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

    【讨论】:

      【解决方案3】:

      您可能误解了 Instruments 分析告诉您的内容。 4.3%的95%不算多。这一切都取决于发生了什么。如果您没有遇到严重的减速,请不要进行不必要的优化!

      不过,要问自己一个问题,您是否真的需要一组物理图像数据。将图像文件解压缩到其 UIImage 数据位图中确实需要很长时间。 (更不用说你可以通过这种方式耗尽内存。)为什么不存储一个字符串数组(你的 pathForResource 字符串)并仅在需要时获取图像?

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

      【讨论】:

      • 谢谢!!这是在您拍照时模拟动画的图像。
      • 考虑一下,也许,animatedImageNamed:duration:
      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多