正如标题所说,假设我用imageNamed:
实例化一个UIImage对象..这创建并返回一个指向自动缓存的UIImage对象的指针,对吗?
如果框架决定需要清除其缓存(无论出于何种原因,尽管很可能内存不足),会发生什么?我只是被一个死指针困住了吗?
编辑:我问的原因不是我计划使用imageName,而是在我自己的资源管理类中复制其核心功能。
答案 0 :(得分:4)
只要保留图像,就不会从缓存中清除它。如果您在清除之前的某个时间再次使用imageNamed并且没有更多活动指向图像,则缓存会有所帮助。在这种情况下,您只需重新获取图像,而无需重新加载。 Apple最终公开了此功能,以便我们在NSCache
的自己的应用中使用答案 1 :(得分:1)
我一直认为,如果你没有保留+imageNamed:
给你的对象,那么在初次通话之后的任何时候它都不一定有效。但保留它似乎可以保持这个实例的存在。
答案 2 :(得分:1)
它会为您加载新图像。这是文档:
此方法在系统缓存中查找 对于具有指定的图像对象 命名并返回该对象(如果它) 存在。如果匹配的图像对象是 尚未在缓存中,此方法 从中加载图像数据 指定文件,缓存它,然后 返回结果对象。
答案 3 :(得分:1)
据我所知,imageNamed的“autocache”问题是,一旦你用UIImage :: imageNamed打开一个图像,它就会被系统缓存而不会被释放。这就是为什么Apple鼓励使用UIImage :: imageWithContentsOfFile代替偶尔使用的图像。对于在UI中经常使用的图像,imageNamed是可以的。
您的实例在保留时不会被卸载。