Iphone 过期的[UIImage ImageName:]对象会发生什么情况?

Iphone 过期的[UIImage ImageName:]对象会发生什么情况?,iphone,uiimage,Iphone,Uiimage,如标题所示,假设我用imagename:实例化一个UIImage对象。。这将创建并返回指向自动缓存UIImage对象的指针,对吗 如果框架决定需要清除其缓存(无论出于何种原因,尽管很可能内存不足),会发生什么情况?我只是被一个死指针卡住了吗 编辑:我问这个问题的原因不是我打算使用imageName,而是在我自己的资源管理类中复制它的核心功能。我一直认为,如果您不保留+imageName:提供给您的对象,那么在初始调用之后的任何时候它都不一定有效。不过,保留它似乎可以使该实例保持活动状态。它将为您

如标题所示,假设我用
imagename:
实例化一个UIImage对象。。这将创建并返回指向自动缓存UIImage对象的指针,对吗

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


编辑:我问这个问题的原因不是我打算使用imageName,而是在我自己的资源管理类中复制它的核心功能。

我一直认为,如果您不保留
+imageName:
提供给您的对象,那么在初始调用之后的任何时候它都不一定有效。不过,保留它似乎可以使该实例保持活动状态。

它将为您加载新映像。以下是文件:

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

据我所知,imageNamed的“自动缓存”问题是,一旦使用UIImage::imageNamed打开图像,它将被系统缓存,并且永远不会发布。这就是为什么苹果鼓励将UIImage::imageWithContentsOfFile用于偶尔使用的图像。对于UI中经常使用的图像,ImageName是可以的


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

只要您保留映像,它就不会从缓存中清除。如果在清除之前的某个时间再次使用imageNamed,并且不再有指向该图像的活动指针,则缓存会有所帮助。在这种情况下,您只需重新获取图像,而无需重新加载。苹果最终向我们展示了这一功能,让我们在自己的应用程序中使用。嗯,我想他在调用[UIImage ImageName:]时询问缓存,而不是他使用UIImage对象again@vodkhang-是的,从技术上讲这是正确的,但如果通过保留对象,我能够影响对缓存的一些控制,那么这对我来说是非常有帮助的。保留似乎是一条路要走。谢谢你给我指点NSCache,虽然它不直接在这里应用。虽然它不在iPhone应用程序中(还没有)。它在iOS 4.0中,请看它没有“从未”发布,缓存可能随时被清除。但是你得到的图像,如果保留,会被保留。。。如果你在许多地方要求相同的图像,他们都会使用相同的缓存数据作为基础。它可能会被清除,但显然,有时不会:这似乎是iOS<3.0上的一个错误