IOS App将图像保存在内存中

时间:2017-06-16 15:18:25

标签: ios swift3 xcode8

我的应用程序有两个带图像的视图控制器

当我启动应用程序时,内存增加,当我然后切换到另一个视图控制器并加载第二个图像(我有一个按钮来执行此操作)时,内存再次上升...这就是我所期望的。

但是,当我关闭第二个VC控制器或通过按钮删除第二个VC中的图像,然后关闭控制器时,内存永远不会停止。

为什么会这样,带有大量图像的应用程序可能会变大...如何释放第二个VC的内存或至少释放第二个图像的内存。

我正在运行应用程序时在Xcode 8中的调试导航器下查看内存。

xcode project can be found here , very simple

1 个答案:

答案 0 :(得分:1)

iOS会缓存图片。 documentation for UIImage(named:)说:

  

讨论

     

此方法在系统缓存中查找具有指定名称的图像对象,并返回最适合主屏幕的图像变体。如果匹配的图像对象尚未存在于缓存中,则此方法将从磁盘或可用资产目录中查找并加载图像数据,然后返回生成的对象。

     

系统可以随时清除缓存的图像数据以释放内存。清除仅针对缓存中但当前未使用的图像...

     

特别注意事项

     

如果您的图像文件只显示一次并希望确保它不会添加到系统的缓存中,则应使用   imageWithContentsOfFile:。这会将您的一次性图像保留在系统图像缓存之外,从而可能会改善应用程序的内存使用特性。

注意,您无法控制何时释放此缓存。操作系统在其认为合适的情况下执行此操作(通常是为了响应内存压力)。

最重要的是,我们通常不担心UIImage的固有缓存,只是确保应用没有自己的内存问题,例如:确保调用deinit和/或使用Xcode中的“调试内存图”功能来观察内存图。或者,如果需要,可以使用UIImage(contentsOfFile:)以编程方式设置图像。