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

时间:2011-12-13 15:11:03

标签: ios iphone objective-c exit

在我的应用程序的某个时刻,我已经完成了exit(0),这会导致我的应用崩溃。但我还没弄清楚在执行时调用哪种方法。

我已将消息放入:

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

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

5 个答案:

答案 0 :(得分:19)

来自Apple的人类用户指南...

  

不要以编程方式退出

     

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

     

显示描述问题的有吸引力的屏幕并建议a   更正。屏幕提供反馈,向用户保证   你的申请没有错。它让用户掌控,   让他们决定是否要采取纠正措施   继续使用您的应用程序或按主页按钮并打开一个   不同的应用

     

如果只有部分应用程序的功能无效,请显示   人们激活功能时的屏幕或警报。显示   仅当人们尝试访问不是的功能时才发出警报   运作。

如果您已决定以编程方式退出...

在C中,exit(0)将停止执行应用程序。这意味着不会调用任何委托方法或异常处理程序。因此,如果目标是确保在关闭时调用某些代码,即使在强制关闭时,也可能有另一种选择。在AppDelegate中实现一个名为-(void)applicaitonIsgoingAway的自定义方法。在您希望调用现有代码的任何地方调用此方法:

  1. applicationWillTerminate
  2. applicationDidEnterBackground
  3. onUncaughtException
  4. 前两个是您在问题中已经提到过的。第三种可以是各种各样的。它是一个全局异常处理程序。下一位来自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

答案 1 :(得分:8)

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

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

苹果不鼓励你在任何地方打电话退出。

答案 2 :(得分:2)

exit(0)是一个C函数,它终止了你的应用程序进程,因此不会调用任何应用程序委托方法,应用程序将立即被终止。 Apple强烈反对您的应用退出,因为它似乎对用户不利。

答案 3 :(得分:0)

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

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

除此之外,您的用户可以按主页按钮关闭您的应用程序。

答案 4 :(得分:-3)

这些方法将被调用,但你不能使用exit(0)你需要按后退按钮关闭你的应用程序然后这些方法将被调用