【发布时间】: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