我正在编程一个iPhone应用程序,我需要强制它退出由于某些用户操作。在清理应用程序分配的内存后,调用什么方法来终止应用程序?


当前回答

[[UIApplication sharedApplication] terminateWithSuccess];

它工作正常,自动调用

- (void)applicationWillTerminateUIApplication *)application delegate.

要删除编译时警告,请添加以下代码

@interface UIApplication(MyExtras)
  - (void)terminateWithSuccess;
@end 

其他回答

经过一些测试,我可以这样说:

使用私有接口:[UIApplication sharedApplication]将导致应用程序看起来像它崩溃了,但它将调用- (void)applicationWillTerminate:(UIApplication *)应用程序之前这样做; 使用退出(0);也会终止应用程序,但它看起来“正常”(跳板的图标看起来像预期的一样,有缩小效果),但它不会调用- (void)applicationWillTerminate:(UIApplication *)应用程序委托方法。

我的建议:

在委托上手动调用- (void)applicationWillTerminate:(UIApplication *)应用程序。 调用退出(0);。

嗯,如果你的应用需要网络连接,你可能“不得不”退出应用程序。你可以显示一个警告,然后做这样的事情:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(terminate)]) {
    [[UIApplication sharedApplication] performSelector:@selector(terminate)];
} else {
    kill(getpid(), SIGINT); 
}

您是否尝试过exit(0)?

或者,[[NSThread主线程]退出],虽然我没有尝试,这似乎是更合适的解决方案。

我的应用程序最近被拒绝了,因为我使用了一个无文件记录的方法。字面意思:

“不幸的是,它不能添加到App Store,因为它使用的是私有API。如iPhone开发者程序许可协议第3.3.1节所述,禁止使用非公共api:

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

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

[[UIApplication sharedApplication] terminateWithSuccess];

它工作正常,自动调用

- (void)applicationWillTerminateUIApplication *)application delegate.

要删除编译时警告,请添加以下代码

@interface UIApplication(MyExtras)
  - (void)terminateWithSuccess;
@end