我在虚拟内存中遇到问题,其中应用程序加载数组中的所有图像(使用[UIImage initWithContentOfFile:path])然后按下按钮,这些图像被交换,但虚拟内存增加因应用程序因空间而关闭。我不进行分配,只恢复数组的图像。
问题......
因为虚拟内存永远不会发布并且会越来越多? 我该如何发布虚拟内存?
有人可以帮助我吗?
提前致谢!
答案 0 :(得分:0)
iPhone根本不使用虚拟内存。您需要释放旧映像,并显示新映像以释放资源。但请记住,规则。如果您不是拥有该对象的唯一调用者,则释放它时内存不会消失。因此,如果您将此图像放在数组或其他集合中,例如,它隐式保留添加到其中的对象,则必须事先将其从中删除。
然而,你可以做的是,我假设这些是相当大的图像。我们只是说,2000x2000全彩色,为了简单起见。这意味着这些图像每个将使用16 MB的内存。这只是原始内容。
由于手机的分辨率为最大(像素数)960x640,因此您可以缩小图像,保持纵横比,使宽度和高度不会低于960或640尺寸的上限,因此您的图像将会缩小1333x1333,现在可以减少每个映像16 MB的内存占用,每个映像只需7.1 MB。现在,您可以在缩放后加载两倍于之前的图像,这可能就是您需要的所有图像,以便有时间从您要卸载的另一个图像中回收内存资源。
答案 1 :(得分:0)
为什么不使用[UIImage imageWithContentsOfFile:path]?你仍然需要小心你加载了多少,但它们将被自动释放,因此只有当前在数组/保留的那些才会出现。