过期的[UIImage imageNamed:]对象会发生什么?

时间:2010-07-23 02:31:14

标签: iphone uiimage

正如标题所说,假设我用imageNamed:实例化一个UIImage对象..这创建并返回一个指向自动缓存的UIImage对象的指针,对吗?

如果框架决定需要清除其缓存(无论出于何种原因,尽管很可能内存不足),会发生什么?我只是被一个死指针困住了吗?

编辑:我问的原因不是我计划使用imageName,而是在我自己的资源管理类中复制其核心功能。

4 个答案:

答案 0 :(得分:4)

只要保留图像,就不会从缓存中清除它。如果您在清除之前的某个时间再次使用imageNamed并且没有更多活动指向图像,则缓存会有所帮助。在这种情况下,您只需重新获取图像,而无需重新加载。 Apple最终公开了此功能,以便我们在NSCache

的自己的应用中使用

答案 1 :(得分:1)

我一直认为,如果你没有保留+imageNamed:给你的对象,那么在初次通话之后的任何时候它都不一定有效。但保留它似乎可以保持这个实例的存在。

答案 2 :(得分:1)

它会为您加载新图像。这是文档:

  

此方法在系统缓存中查找   对于具有指定的图像对象   命名并返回该对象(如果它)   存在。如果匹配的图像对象是   尚未在缓存中,此方法   从中加载图像数据   指定文件,缓存它,然后   返回结果对象。

UIImage imageNamed:

答案 3 :(得分:1)

据我所知,imageNamed的“autocache”问题是,一旦你用UIImage :: imageNamed打开一个图像,它就会被系统缓存而不会被释放。这就是为什么Apple鼓励使用UIImage :: imageWithContentsOfFile代替偶尔使用的图像。对于在UI中经常使用的图像,imageNamed是可以的。

您的实例在保留时不会被卸载。