【问题标题】:Difference b/w imageNamed and imageWithContentsOfFile [closed]黑白 imageNamed 和 imageWithContentsOfFile 的区别 [关闭]
【发布时间】:2013-07-10 11:36:58
【问题描述】:

ObjectiveC 中 imageNamedimageWithContentsOfFile 有什么区别

【问题讨论】:

标签: iphone ios objective-c uiimage


【解决方案1】:

图片名称: imageNamed 缓存是您的图像,您将失去对内存的控制 - 无法保证释放对象实际上会释放图像,但确实会在第二次缓存时提供更快的图像加载。如果您正在使用 Interface Builder,并在 Image View Attributes 中设置图像,那也等于 imageNamed 方法。应用运行时图片会立即缓存

imageWithContentsOfFile : imageWithContentsOfFile 不缓存图像并且对内存更友好,但是因为它不缓存图像并且加载速度要慢得多。 imageWithContentsOfFile: 要求您输入完整路径。我不明白为什么不推荐 imageNamed:,除了您无法访问应用程序包之外的文件这一事实。

【讨论】:

  • “从不将其从内存中释放”不是真的
  • @MatthiasBauch:我现在编辑好了
【解决方案2】:

有一个很好的链接,它解释了这两种方法的区别 image named-vs-image with contents of file

【讨论】:

    【解决方案3】:

    来自this SO link

    UIImage 的方法 imageNamed: 和 imageWithContentsOfFile: 略做 不同的东西。 imageNamed 在特殊系统中加载图像 缓存,然后使用该图像路径的未来调用将返回 图像在缓存中,而不是从磁盘重新加载。 imageWithContentsOfFile 只是将图像加载到您的路径 指定,但不缓存。多次调用 同一图像的 imageWithContentsOfFile 将导致多个 内存中的副本。

    iOS 似乎没有清空缓存(好吧,我不确定) 当发出内存警告时,可能会导致应用程序被 因缺乏可用内存而终止。加载的 UIImages imageWithContentsOfFile 通过清除它们来响应内存警告 图像并在需要时重新加载它,这可能解释了为什么你的 内存峰值消失了。

    此外,模拟器中的缓存似乎比实际大得多 硬件,我在使用 UIImages 时看到的问题和崩溃 imageNamed 只发生在设备上。测试时注意 模拟器!

    我能看到使用 imageNamed 的唯一原因是使用了相同的图像 在你看来很多次。或者,您可以实现自己的 图像缓存,并获得拥有缓存的好处 控制,如此处所述: http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/

    也请查看this 链接。

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      相关资源
      最近更新 更多