【问题标题】:UIViewController does not release its viewsUIViewController 不释放其视图
【发布时间】:2012-01-10 22:30:16
【问题描述】:

我试图修复我的应用程序中的内存泄漏并偶然发现了一件非常有趣的事情。现在我不确定我是否在某处制造了错误,或者只是滥用了该技术,所以我会在你的帮助下尝试把事情弄清楚。以下是发生的事情:

  • 我创建了一个自定义 uiviewcontroller,它从 nib 文件加载其视图
  • 我松开控制器
  • 控制器的 dealloc 方法在我发布一个自定义视图时被调用,该自定义视图是我专门添加到视图层次结构中的一个出口(我从中创建了一个可保留的属性)。它有一个调用 nslog 的 dealloc 方法。
  • nib 文件中的主视图(连接到控制器的视图出口)也是 uiview 的子类,它在其 dealloc 中也调用了 nslog

问题是 - 即使 uiviewcontroller 的 dealloc 被调用,主视图和子视图(有出口的那个)都没有被释放(它们的 NSLog 不会触发)。

这种情况正常吗?也许 iOS 不会立即发布视图?还是我应该开始寻找代码中的错误?如果是这样 - 最可能的原因是什么?

感谢阅读

【问题讨论】:

  • 您是否将 IB 中的主视图附加到您未发布的视图控制器的保留属性上?也许?
  • 我认为您需要发布一些代码,因为很难准确理解您所做的事情。但听起来你肯定是在泄漏对象。
  • 在下面查看我自己的答案。这显然是我自己的错误。

标签: objective-c cocoa-touch uiviewcontroller


【解决方案1】:

深夜调试的问题在于,您甚至没有考虑最简单的角度。因为我想知道事情是如何工作的并且从头开始做所有事情,所以我创建了自己的系统来切换视图控制器。问题是,即使我曾经在需要时释放视图控制器,但我忘记将其从超级视图中删除,因此保留了太多。现在其他地方有泄漏,但我相信我会自己解决。感谢您的 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2011-05-07
    相关资源
    最近更新 更多