UIViewController不会释放其视图

时间:2012-01-10 22:30:16

标签: objective-c cocoa-touch uiviewcontroller

我试图在我的应用程序中修复内存泄漏并偶然发现了一件非常有趣的事情。现在我不确定是否有一个我在某个地方制造的错误或者只是误用了这项技术,所以我会尽力帮助你解决问题。这是发生的事情:

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

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

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

感谢您阅读

1 个答案:

答案 0 :(得分:0)

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