退出iPhone应用程序的正确方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (75)

我正在编写一个iPhone应用程序,由于某些用户的的action我需要强制它退出。清理完分配的应用程序内存后,我应该如何终止应用程序?

提问于
用户回答回答于

你可以尝试使用exit(0)

或者可以尝试[[NSThread mainThread] exit],虽然我没有使用这个方法但是我认为这个比较适用于你的情况。

用户回答回答于

从字面上看:

“不幸的是,它不能被添加到App Store,因为它使用的是私有API。

禁止使用iPhone开发者计划许可协议第3.3.1节中概述的非公共API:

“3.3.1 应用程序只能按照Apple规定的方式使用文档化的API,不得使用或调用任何私有API。”

包含在你的应用程序中的非公共API是terminateWithSuccess。

用户回答回答于

当ApplicationDelegate收到用户退出的消息时会执行以下操作:

- (void)applicationWillResignActive:(UIApplication *)application {

当我收到这个消息的时候我会调用以下方法:

        exit(0);

在我的音频应用程序中,当用户音乐还在播放时并且想同步设备时,有必要退出这个应用程序。一旦同步完成,我就会收到通知。但是在此之后应用程序会看起来想崩溃的样子。

因此,我设置了一个标志,以便在下一个背景操作中真正退出应用程序。 在同步后刷新应用程序也是可以继续运行的。

用户回答回答于

经过一些测试后,以下为我的看法:

  • 使用专用接口:[UIApplication sharedApplication]会导致应用程序看起来像崩溃的,但实际上它会在执行前调用- (void)applicationWillTerminate:(UIApplication *)application
  • 虽然使用exit(0);也会终止应用程序,但它可以使应用程序看起来“正常”(跳板的图标看起来与预期的一样,具有缩小效果),但它不会调用- (void)applicationWillTerminate:(UIApplication *)application方法

我的建议是:

  1. 手动调用- (void)applicationWillTerminate:(UIApplication *)application的委托方法
  2. 调用exit(0);
用户回答回答于

将应用程序上的UIApplicationExitsOnSuspend属性设置为true

用户回答回答于

请查看这里的问答:

https://developer.apple.com/Library/content/qa/qa 1561/_index.html

问:如何以编程方式退出iOS应用程序? 首先无法为终止IOS应用程序提供API。 在IOS中,用户通过Home按钮关闭应用程序。如果你的应用程序有无法提供其预期功能的条件,可以建议你为用户显示一个警报,指出问题的性质和用户可能采取的操作-打开WiFi,启用定位服务等等,允许用户自行决定终止应用程序。

注意:不要调用exit函数。调用exit的应用程序将会出现在用户面前。此外,数据可能无法保存,因为你退出的话-applicationWillTerminate:和相似方法UIApplicationDelegate将得不到调用。

如果在开发或测试期间有必要终止应用程序,则可以使用abort方法,或assert

用户回答回答于

可以跳转到 info.plist并查看应用程序是否在后台执行。当用户单击home键的时候,应用程序将完全退出。

用户回答回答于

实际上这种方式并没有让程序真正终止,这只是一种强迫用户退出的方式。

UIAlertView *anAlert = [[UIAlertView alloc] initWithTitle:@"Hit Home Button to Exit" message:@"Tell em why they're quiting" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
[anAlert show];
用户回答回答于

exit(0)对于用户来说是比较崩溃的,因此在退出之前应该对用户显示确认消息。在确认暂停后(以编程方式按下home键),等待2秒,app正在后台运行,然后退出用户的视图。

-(IBAction)doExit
{
    //show confirmation message to user
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Confirmation"
                                                 message:@"Do you want to exit?"
                                                delegate:self
                                       cancelButtonTitle:@"Cancel"
                                       otherButtonTitles:@"OK", nil];
    [alert show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != 0)  // 0 == the cancel button
    {
        //home button press programmatically
        UIApplication *app = [UIApplication sharedApplication];
        [app performSelector:@selector(suspend)];

        //wait 2 seconds while app is going background
        [NSThread sleepForTimeInterval:2.0];

        //exit app when app is in background
        exit(0);
    }
}
用户回答回答于

在iPhone上,没有禁用应用程序这个概念。唯一会导致应用程序退出的动作是触摸手机上的Home按钮,而这不是开发者所考虑的东西。

根据苹果的说法,你的应用程序不应该自行终止。由于用户没有点击Home按钮,任何主屏幕的返回都会给用户留下应用程序崩溃的印象。这本身是比较令人困惑的,而且你也应该避免不规范的行为。

扫码关注云+社区