【发布时间】:2012-01-13 15:57:37
【问题描述】:
我的 UIViewController 似乎有一个奇怪的(非?)问题。似乎控制器在被释放时没有释放其子视图。我将 NSLog 消息放置在所有子视图的 dealloc 方法以及视图控制器中。视图控制器 dealloc 被调用,但子视图没有。但是,如果我随后将该视图控制器的另一个实例推送到导航堆栈,则似乎前一个实例的所有子视图随后都被释放(我在控制台中收到一堆 NSLog 消息让我知道)。我已经检查过了,我没有单独引用呈现视图控制器(正在执行推送的那个)中的自定义视图控制器。
一个小(可能)细节:自定义视图控制器确实接收到它存储的块,然后在弹出之前执行。但是,我确实向它发送了 nil 并且我得到了相同的行为。另外,当前视图控制器在弹出堆栈时会解除分配,因此没有保留周期。
另外,我确实尝试在自定义视图控制器的 dealloc 方法中显式释放每个视图。同样的行为。
导航控制器是否可能会保留它?我的任何其他视图控制器似乎都没有这样做。
我的问题是这确实代表了内存泄漏(所有这些子视图);虽然泄漏没有叠加,但它仍然是泄漏。
【问题讨论】:
-
小例子很有帮助。
-
我同意@Joe,分享一些代码。特别是,我以前遇到过块泄漏的问题。如果您将其设置为 nil,这应该不是问题,除非该代码路径不执行。
-
抱歉缺少示例,但这与两个类有关,总共大约 1,000 行代码,我不知道该代码的哪里出现问题。跨度>
-
道德+1。不过,您应该把它作为答案并接受它,这样人们就知道这个问题已经结束了。
-
它不会让我发布我自己的问题的答案。我会在大约 5 小时内 :)
标签: iphone objective-c ios automatic-ref-counting