应用程序占用太多内存直到崩溃! (苹果手机)

Posted

技术标签:

【中文标题】应用程序占用太多内存直到崩溃! (苹果手机)【英文标题】:App is taking too much memory until a crash ! (iPhone) 【发布时间】:2012-11-02 20:26:12 【问题描述】:

我是开发的初学者,我正在制作一个包含大约 150 个 ViewController 的应用程序!每个都有一个 UIImageView。

我一直在做一些测试,在 iPhone 本身上使用该应用一段时间后,当我继续查看 ViewControllers 时它会崩溃。

我一直在仪器中对此进行分析,我没有泄漏,但是我的内存分配不断增加,当我继续在 iPhone 上查看 ViewControllers 时,使用量不断增加,直到崩溃。

我认为很明显它正在崩溃,因为应用程序只是占用了太多内存。

那么任何人都可以解释如何释放视图控制器以释放内存,这样就不会发生崩溃

提前致谢!

【问题讨论】:

【参考方案1】:

您需要问自己的第一个问题是为什么需要 150 个 ViewController。 您想呈现 150 张不同的图像吗? 如果是这样,那么多个 ViewControllers 不是要走的路。您可能需要使用包含您的图片的 UIScrollView(当然,不是所有图片。使用延迟加载)。

在您的情况下可能发生的情况是,您每次需要显示新的 ViewController 时都调用“pushViewController”,但这不会释放以前的 ViewController。它只是简单地堆叠所有之前的 ViewController 并保留它们的指针。

你看,导航控制器的工作方式是它们有一个视图控制器数组。每次你呈现一个新的视图控制器时,它都会被添加到数组的末尾。当您单击“返回”或调用“popViewController”时,数组的最后一项被删除(然后自动从内存中释放)。

请参阅this 和this 问题,了解如何创建 UIScrollView 以滚动图像。

【讨论】:

非常感谢您的回答..我知道我不应该使用多个viewControllers..首先我会尝试调用“pushViewController”会有用吗?然后我将重新设计我的应用程序,我将使用 UIScrollView .. 再次感谢您! :) @AbdElrhmanRizk 不,您不应该使用“pushViewController”,因为它会保留指向您以前的 ViewControllers 的指针。您应该使用 UIScrollView 或简单地将您当前呈现的图像替换为您要显示的下一个图像。即myImageView.image = [UIImage imageNamed:@"NewPicName.png"] 好吧,我会用 UIScrollView .. 谢谢你的时间 :) .. 祝你好运 ;)

以上是关于应用程序占用太多内存直到崩溃! (苹果手机)的主要内容,如果未能解决你的问题,请参考以下文章

苹果手机里的系统文件怎么删除

MacBook Pro 耗电变快是啥原因?应该怎么解决

iphone x卡顿严重

VS2015安装后占多少内存?是安装啥版本的好?

苹果系统占了100个g怎么清理

苹果升级后卡顿严重怎么解决