【发布时间】:2012-03-02 09:44:21
【问题描述】:
我有一个 UIViewController 被推送到容器控制器然后弹出,使用分配工具,我可以看到视图控制器随后被销毁。但是,永远不会到达控制器的 dealloc 中的断点。有谁知道为什么不调用 dealloc ? ARC是否可以在不调用dealloc的情况下销毁对象?
另外,我禁用了 NSZombies(有人说这会导致 dealloc 不触发)。
编辑:
Dealloc 没有做太多,只是打印到控制台,它永远不会被调用:
- (void)dealloc
{
NSLog(@"Deallocating...");
}
我不能发布容器控制器——它是专有的并且太复杂了。 Dealloc 在某些控制器而不是其他控制器上被一致调用。如果我能找到时间,我会尝试发布一个重现问题的简化版本。
有什么方法可以验证 NSZombies 是否被禁用?
编辑2
我正在发布仪器的屏幕截图;在我看来,它正在正确释放。
【问题讨论】:
-
它应该被调用,即使在 ARC 下。但是,您不能包含 [super dealloc],ARC 会为您添加它。也许分享这个类的代码?
-
dealloc方法中有没有方法?
-
您应该发布
-(void)dealloc{}代码。 -
您是否尝试使用
NSLog(...)来标记您的dealloc()而不是断点? -
如果你使用 ARC,你在你的 dealloc 中放了什么代码?也许如果 dealloc 代码没有做任何事情,编译器只是在优化它。您是否尝试在其中放置一个 NSLog() 而不是断点?
标签: ios ios5 automatic-ref-counting