2010-07-24 30 views
0
- (void)applicationWillTerminate:(UIApplication *)application { 
    NSLog(@"applicationWillTerminate");   //======>1  
} 

- (void)dealloc { 
    NSLog(@"dealloc");       //=======>2 
    [window release]; 
    [super dealloc]; 
} 

为什么不是1 & 2 textout msg当我退出此程序调试?......关于applicationWillTerminate

回答

0

当你说“完全与调试”,你是什么意思?这是标准退出(例如Cmd-Q),还是你在Xcode中点击停止按钮?这个方法在你的应用程序委托中吗?它是否以释放模式运行?

关于#2,无法保证-dealloc将被调用,并且它是在程序终止时跳过它以加快速度的标准程序(无论如何操作系统将收回所有内存)。除了因为这个原因释放内存之外,它不应该做更多的事情。

+0

yes,standerd退出Cmd-Q,在调试模式下不释放 – user400827 2010-07-24 04:02:17

0

我得到它(由苹果)

此方法(applicationWillTerminate)当用户退出应用程序,因为应用程序简单地移动到在这种情况下,背景通常是不被调用。但是,在应用程序在后台运行(未挂起)并且系统因某种原因需要终止应用程序的情况下,可能会调用此方法。

在iOS 4.0及更高版本中,当用户退出支持后台执行的应用程序时,将调用此方法,而不是applicationWillTerminate:方法。您应该使用此方法释放共享资源,保存用户数据,使计时器无效并存储足够的应用程序状态信息,以便将应用程序恢复到其当前状态,以防稍后终止。您还应该禁用应用程序用户界面的更新,并避免使用某些类型的共享系统资源(例如用户的联系人数据库)。避免在后台使用OpenGL ES也是必要的。