在我的应用程序的某个时刻,我已经完成了exit(0)
,这会导致我的应用崩溃。但我还没弄清楚在执行时调用哪种方法。
我已将消息放入:
(void)applicationWillTerminate:(UIApplication *)application
(void)applicationDidEnterBackground:(UIApplication *)application
但这一切似乎都没有被召唤!关于在exit(0)
完成时调用什么方法的任何想法?
答案 0 :(得分:19)
来自Apple的人类用户指南...
不要以编程方式退出
永远不要以编程方式退出iOS应用程序,因为人们倾向于 将此解释为崩溃。但是,如果外部环境阻止 你的应用程序按预期运行,你需要告诉你 用户了解情况并解释他们可以做些什么。 根据应用程序故障的严重程度,您有两个 选择。
显示描述问题的有吸引力的屏幕并建议a 更正。屏幕提供反馈,向用户保证 你的申请没有错。它让用户掌控, 让他们决定是否要采取纠正措施 继续使用您的应用程序或按主页按钮并打开一个 不同的应用
如果只有部分应用程序的功能无效,请显示 人们激活功能时的屏幕或警报。显示 仅当人们尝试访问不是的功能时才发出警报 运作。
在C中,exit(0)
将停止执行应用程序。这意味着不会调用任何委托方法或异常处理程序。因此,如果目标是确保在关闭时调用某些代码,即使在强制关闭时,也可能有另一种选择。在AppDelegate
中实现一个名为-(void)applicaitonIsgoingAway
的自定义方法。在您希望调用现有代码的任何地方调用此方法:
applicationWillTerminate
applicationDidEnterBackground
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
。
答案 1 :(得分:8)
当您致电exit(0)
时,您会立即终止您的申请。 0是状态代码,表示成功终止。
没有其他方法被调用,你的应用程序就会死掉。
苹果不鼓励你在任何地方打电话退出。
答案 2 :(得分:2)
exit(0)
是一个C函数,它终止了你的应用程序进程,因此不会调用任何应用程序委托方法,应用程序将立即被终止。 Apple强烈反对您的应用退出,因为它似乎对用户不利。
答案 3 :(得分:0)
没有Apple支持的方法以编程方式终止您的应用程序。致电exit
肯定是不可能的。这会导致各种错误(例如多任务切换器会破坏)以及错误。
如果您尝试禁用多任务处理,可以使用Info.plist文件中的UIApplicationExitsOnSuspend
键执行此操作(键的标题是“应用程序不在后台运行”)。
除此之外,您的用户可以按主页按钮关闭您的应用程序。
答案 4 :(得分:-3)
这些方法将被调用,但你不能使用exit(0)你需要按后退按钮关闭你的应用程序然后这些方法将被调用