【问题标题】:iPhone memory consumptioniPhone内存消耗
【发布时间】:2009-05-24 21:51:08
【问题描述】:

我开发了一个 iphone 应用程序,它打开一个选项卡视图,第一个选项卡是一个 uinavigationcontroller。在该控制器中是一个包含 uitableview 的 uiviewcontroller。表格视图中列出了 2 个项目。当我选择一个或另一个项目时,它会显示另一个带有动态生成的 uiviews 的 uiviewcontroller。

当我按下导航控件顶部的“返回”按钮,返回到上一个 uiviewcontroller(包含 tableview),然后我再次选择 uitableview 中的 2 个项目中的 1 个,它几乎吃光了根据 Instruments 的 2M 内存。每次都会出现这种情况,直到达到大约 24M,然后我的应用程序崩溃。

我没有记录任何泄漏。

当按下“返回”按钮释放分配给 uiviewcontroller 的内存时,我需要做些什么吗?

【问题讨论】:

  • 你在使用 SQLite 吗?您的应用程序是否收到内存警告?这是在设备上运行还是通过模拟器运行?
  • 不,我没有使用 SQLite。我正在使用属性列表文件来保存数据。我不确定内存警告。我需要向 didReceiveMemoryWarning 方法添加一些代码,以查看我收到的警告类型。我正在通过模拟器和我的 iPhone 设备运行我的应用程序。两者都注册了大量内存使用

标签: iphone memory


【解决方案1】:

我不确定您在 iPhone 开发方面的进度,或者您对内存管理了解多少,但这可能是一个引用计数问题。记住:如果你调用 alloc 或 retain,你需要调用 release,并且永远不要在你没有分配或保留的东西上调用 release。

【讨论】:

    【解决方案2】:

    导航控制器保留所有推送到其堆栈上的视图控制器,因此如果您确保此类视图控制器是自动释放的,或者您对它们没有任何要求(例如,alloc、push、release),它们将在以下情况下自动释放弹出。

    如果您这样做并且仍然丢失内存,也许您从他们的视图控制器中过度保留了您的自定义视图?

    如果不看代码就很难说,但可能有用的一件事是在所有 UIViewController 上实现 -didReceiveMemoryWarning 并记录它们的详细信息——然后,如果你看到来自视图控制器的内存警告,你认为应该被释放,您就有了进一步调查的起点。

    另外,您是否尝试过 Clang 静态分析器?泄漏工具很有用,但会产生大量误报。 CSA 也不是灵丹妙药,但它可以捕捉到 Leaks 遗漏的一些东西。

    【讨论】:

      猜你喜欢
      • 2010-09-26
      • 1970-01-01
      • 2010-11-14
      • 2010-10-12
      • 1970-01-01
      • 2011-10-03
      • 2012-11-24
      • 2013-10-08
      • 1970-01-01
      相关资源
      最近更新 更多