adr*_*ian 5 iphone objective-c exit ios
在我的应用程序的某些时候,我已经完成了这个exit(0)
崩溃我的应用程序.但我还没弄清楚在执行时调用哪种方法.
我把消息放入:
(void)applicationWillTerminate:(UIApplication *)application
(void)applicationDidEnterBackground:(UIApplication *)application
Run Code Online (Sandbox Code Playgroud)
但这一切似乎都没有被召唤!什么方法在exit(0)
完成时被调用?
Jef*_*ski 20
来自Apple的人类用户指南......
不要以编程方式退出
永远不要以编程方式退出iOS应用程序,因为人们倾向于将其解释为崩溃.但是,如果外部环境阻止您的应用程序按预期运行,您需要告知用户有关情况并解释他们可以采取的措施.根据应用程序故障的严重程度,您有两种选择.
显示描述问题的有吸引力的屏幕并建议更正.屏幕提供反馈,向用户保证应用程序没有任何问题.它使用户可以控制,让他们决定是否要采取纠正措施并继续使用您的应用程序或按Home键并打开其他应用程序
如果只有部分应用程序功能不起作用,则在人员激活该功能时显示屏幕或警报.仅当人们尝试访问无法运行的功能时才显示警报.
在C中,exit(0)
将停止执行应用程序.这意味着不会调用任何委托方法或异常处理程序.因此,如果目标是确保在关闭时调用某些代码,即使在强制关闭时,也可能有另一种选择.在您的AppDelegate
实现中,一个名为的自定义方法-(void)applicaitonIsgoingAway
.从您希望调用现有代码的任何地方调用此方法:
applicationWillTerminate
applicationDidEnterBackground
onUncaughtException
前两个是您在问题中已经提到过的.第三种可以是各种各样的.它是一个全局异常处理程序.接下来的一点是关于这个主题的问题.
这个异常处理程序将被调用任何无法处理的异常(否则会导致应用程序崩溃).从这个处理程序中,您可以调用applicaitonIsgoingAway
,就像在其他2个案例中一样.从我上面提到的另一个问题,你可以找到类似的答案.
void onUncaughtException(NSException* exception)
{
[[AppDelegate sharedInstance] applicationIsgoingAway];
}
Run Code Online (Sandbox Code Playgroud)
但为了使其工作,您需要将此方法设置为异常处理程序,如此...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&onUncaughtException);
//There may already be more code in this method.
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过调用以编程方式退出应用程序NSAssert(FALSE, @"Quitting the app programmatically.");
只要没有其他异常处理程序来捕获它,您的应用程序将开始崩溃,并且将调用您的异常处理程序代码.转而打电话applicationIsGoingAway
.
当您致电时,exit(0)
请立即终止您的申请.0是状态代码,表示成功终止.
没有其他方法被调用,你的应用程序就会死掉.
苹果不鼓励你在任何地方打电话退出.
exit(0)
是一个终止应用程序进程的 C 函数,因此不会调用任何应用程序委托方法,应用程序将立即被终止。Apple 强烈建议您不要退出您的应用程序,因为它对用户来说似乎已损坏。
归档时间: |
|
查看次数: |
14135 次 |
最近记录: |