从苹果的人类用户指南...
不要退出编程
永不放弃iOS应用程序编程,因为人们往往 解释为崩溃。但是,如果外部环境阻止您的应用程序按预期运行,您需要告知用户有关情况并解释他们可以对此做些什么。 根据应用故障的严重程度,您有两个选择 。
显示一个有吸引力的屏幕,描述问题并提出 更正。屏幕提供的反馈可以让用户确信你的应用程序没有问题。它让用户控制, 让他们决定是否要采取纠正措施和 继续使用您的应用程序或按Home键,然后打开一个 不同的应用
如果仅仅是一些应用程序的功能无法正常运作,显示 当人们激活该功能时,屏幕或警报。只有当人们尝试访问不是 功能的功能时,才会显示 警报。
如果你决定,你会编程反正退出...
在C,exit(0)
将暂停应用程序的执行。这意味着将不会调用委托方法或异常处理程序。因此,如果目标是确保某些代码在关闭时被调用,即使是强制关闭,也可能有另一种选择。在您的AppDelegate
中实施一种称为-(void)applicaitonIsgoingAway
之类的自定义方法。从通话中的任何位置这个方法,你想叫你的退出代码:
applicationWillTerminate
applicaitonDidEnterBackground
onUncaughtException
前两个是你已经在你的问题中提到的。第三个可以是各种各样的。这是一个全局异常处理程序。接下来的一点来自question on that very topic。
这个异常处理程序将被调用以处理任何未引发异常(否则会导致应用程序崩溃)。从这个处理程序中,您可以调用applicaitonIsgoingAway
,就像在其他两种情况下一样。从上面我提到的另一个问题,你可以找到类似这样的答案。
void onUncaughtException(NSException* exception)
{
[[AppDelegate sharedInstance] applicationIsgoingAway];
}
但为了这个工作,你需要设置这个方法了像这样的异常处理程序...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&onUncaughtException);
//There may already be more code in this method.
}
现在,你可以通过调用NSAssert(FALSE, @"Quitting the app programmatically.");
作为编程退出程序只要没有其他异常处理程序来捕获它,您的应用程序将开始崩溃,并且将调用您的异常处理程序代码。依次调用applicationIsGoingAway
。
检查此问题:http://stackoverflow.com/questions/355168/proper-way-to-exit-iphone-application –