为什么dealloc没有被称为一个全新的项目(xcode 3.1.4)?

时间:2012-04-27 07:37:47

标签: iphone ios xcode dealloc

我开始学习iPhone编程,这显然是一个非常简单的问题。我在xcode 3.1.4工作。现在,当我创建一个基于窗口的应用程序的新项目并修改dealloc(在AppDelegate.m文件中)以便它实际上在控制台上创建一个print语句时,我实际上可以看到声明。那么,我的问题是为什么?

因此,我可以避免明显的答案,修改后的dealloc是:

- (void)dealloc {
    NSLog(@"Dealloc is called");
    [window release];
    [super dealloc];
}

这是不是很奇怪?

最初我发布了类似的问题here,但现在我知道真正的问题是我在这里描述的问题。版主,随时删除我的其他帖子。我很抱歉。

3 个答案:

答案 0 :(得分:4)

在应用程序结束之前,appDelegate不会被释放,此时在控制台上看到消息为时已晚。

此外,对于任何新项目,您都应该使用ARC,这样就无需在很多情况下调用dealloc。

答案 1 :(得分:2)

调用此dealloc时可能无法使用NSLog。当程序完成时,App委托是项目中最后一个被释放的东西。

答案 2 :(得分:1)

它没有被调用,因为那时你的应用程序可能正在运行。当它被调用时,您的应用程序可能已被终止。我同意borrrden的观点,即appdelegate的dealloc函数是最后一个被调用的东西。如果你想了解retai / release,alloc / dealloc,请尝试使用xcode 3.2.6,如果你想使用ARC,请尝试xos 4.2和ios5。