在iPhone应用程序中调用exit(0)

在我的应用程序的某个时候,我已经做了这个exit(0) ,这使我的应用程序崩溃。 但是我还没有想到当执行这个方法时会调用什么方法。

我把信息放在:

 (void)applicationWillTerminate:(UIApplication *)application (void)applicationDidEnterBackground:(UIApplication *)application 

但是这似乎没有被调用! 任何关于exit(0)完成时调用什么方法的想法?

从苹果的人类用户指南…

不要以编程方式退出

切勿以编程方式退出iOS应用程序,因为人们倾向于将其解释为崩溃。 但是,如果外部环境阻止您的应用程序按预期运行,则需要告诉用户有关情况并解释他们可以做些什么。 根据应用程序故障的严重程度,您有两种select。

显示描述问题的有吸引力的屏幕并提出修正。 屏幕提供的反馈可以让用户确信应用程序没有任何问题。 它将用户置于控制之下,让他们决定是否要采取纠正措施并继续使用您的应用程序,或者按主页button并打开不同的应用程序

如果只有某些应用程序的function无法正常工作,则在用户激活function时显示屏幕或警报。 仅当用户尝试访问不能正常工作的function时才显示警报。

如果你已经决定你要退出编程方式…

在C中, exit(0)将停止应用程序的执行。 这意味着将不会调用委托方法或exception处理程序。 所以,如果目标是确保某些代码在closures时被调用,即使是强制closures,也可能有另一种select。 在你的AppDelegate实现一个自定义的方法叫做-(void)applicaitonIsgoingAway 。 从你想要退出代码的任何地方调用这个方法:

  1. applicationWillTerminate
  2. applicaitonDidEnterBackground
  3. onUncaughtException

前两个是你已经提到的问题。 第三个可以是各种各样的。 这是一个全局exception处理程序。 接下来的一点是来自这个话题的问题 。

这个exception处理程序将会被调用以处理任何不需要的exception(否则会导致应用程序崩溃)。 从这个处理程序中,您可以调用applicaitonIsgoingAway ,就像在其他两种情况下一样。 从上面提到的另一个问题,你可以find类似的答案。

 void onUncaughtException(NSException* exception) { [[AppDelegate sharedInstance] applicationIsgoingAway]; } 

但为了这个工作,你需要设置这个方法,像这样的exception处理程序…

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSSetUncaughtExceptionHandler(&onUncaughtException); //There may already be more code in this method. } 

现在,您可以通过调用NSAssert(FALSE, @"Quitting the app programmatically."); 只要没有其他exception处理程序来捕捉这个,你的应用程序就会崩溃,你的exception处理程序代码将被调用。 依次调用applicationIsGoingAway

当您致电exit(0)您立即终止您的申请。 0是表示成功终止的状态码。

没有其他的方法被调用,你的应用程序就死掉了。

苹果不鼓励你打电话到任何地方。

exit(0)是一个C函数,终止你的应用程序的进程,因此没有应用程序的委托方法将被调用,应用程序将立即被杀死。 苹果公司build议强烈反对你的应用程序退出,因为它似乎打破了用户。

没有Apple支持的方法来以编程方式终止您的应用程序。 呼唤exit当然是不可能的。 这会导致各种各样的错误(例如多任务切换器坏掉)以及错误。

如果您尝试禁用多任务处理,则可以使用Info.plist文件中的UIApplicationExitsOnSuspend键(该键的标题是“应用程序不在后台运行”)执行此操作。

除此之外,由用户按主页buttonclosures您的应用程序。

这些方法将被调用,但你不能使用退出(0),你将需要按下后退buttonclosures你的应用程序,然后这些方法将被称为