【问题标题】:Help - endless dealloc loop帮助 - 无限的dealloc循环
【发布时间】:2011-10-27 19:22:54
【问题描述】:

我正在尝试强化我的代码以避免低内存崩溃。我特别卡在一个,根据这些步骤发生:

  1. 启动应用程序。
  2. 点击显示模态视图控制器的按钮。
  3. 模拟内存警告。

通过随处可见的 NSLog 语句,我看到初始(呈现)视图控制器收到内存警告,然后它的 dealloc 方法被一遍又一遍地调用,直到崩溃。出于调试目的,除了 NSLog 语句之外,我的 didReceiveMemoryWarning、viewDidUnload 或 dealloc 方法中没有任何内容。

这听起来像什么?也许我有一些保留的实例变量,它有一个指向视图控制器的指针?我只需要对可能导致这种情况的原因进行一般猜测。无法发布运行到 1000 行的整个视图控制器代码。

谢谢。

【问题讨论】:

  • 嗯,你有没有看过你的视图控制器上的保留计数,当它命中dealloc时。我想它应该是 1。另一个想法是你有一个代表保留控制器,这两者之间有一个保留循环吗?
  • 你能尝试用新项目和简单的视图控制器来重现它吗?
  • 是的,我想我找到了问题所在。在我将视图添加到主窗口之后,我在我的 appdelegate 中发布了视图控制器。愚蠢的。请随意回答这个问题,我会接受。

标签: objective-c ios memory-management uiviewcontroller dealloc


【解决方案1】:

您在最新评论中表示您认为您解决了过度释放视图控制器的问题,但我对此不太确定。过度释放视图控制器仍将导致 dealloc 仅被调用一次。

反复调用dealloc方法直到崩溃”的一个更可能的原因是在您的dealloc方法中调用[self dealloc];,而不是适当的[super dealloc];。检查您的代码在这方面是否正确,可能存在无限递归导致您出现问题。 :)

【讨论】:

  • 这看起来不是原因,但作为一个原因是有道理的。我认为这一定很奇怪,就像视图在视图控制器上保留了计数一样。当视图被释放(在模态控制器下不可见)时,它向视图控制器发送了一个dealloc,这可能会产生一些内部错误情况。此时,所有正在执行的代码都在一个已释放的视图控制器上,或者在一个没有演示者的模态视图控制器上,对吧?无论如何,我停止在应用程序委托中释放视图控制器,并且不再发生此错误。
【解决方案2】:

您是否覆盖了您的 ViewControllers release 方法?我曾经这样做,而不是覆盖dealloc。深夜编码 FTL。

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2010-09-23
    • 1970-01-01
    相关资源
    最近更新 更多