我正在编程一个iPhone应用程序,我需要强制它退出由于某些用户操作。在清理应用程序分配的内存后,调用什么方法来终止应用程序?
当前回答
我的应用程序最近被拒绝了,因为我使用了一个无文件记录的方法。字面意思:
“不幸的是,它不能添加到App Store,因为它使用的是私有API。如iPhone开发者程序许可协议第3.3.1节所述,禁止使用非公共api:
“3.3.1应用程序只能按照苹果规定的方式使用文档api,不得使用或调用任何私有api。”
包含在应用程序中的非公共API是terminateWithSuccess"
其他回答
用户应该决定应用程序何时退出。 我不认为当应用退出时这是一种良好的用户交互。因此,它没有很好的API,只有home按钮有一个。
如果有错误:更好地实现它或通知用户。 如果必须重新启动:执行它更好的通知用户。
这听起来很愚蠢,但在不让用户决定的情况下退出应用程序,并且不通知他,这是一种糟糕的做法。苹果表示,由于有一个home键用于用户交互,所以同一个功能(退出应用程序)不应该有两个东西。
去你的信息。plist并检查关键“应用程序不运行在后台”。这一次,当用户单击home按钮时,应用程序将完全退出。
Swift 4.2(或更老版本)
库称为达尔文可以使用。
import Darwin
exit(0) // Here you go
注意:在iOS应用程序中不建议这样做。
这样做会得到崩溃日志。
[[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);。
推荐文章
- 如何删除默认的导航栏空间在SwiftUI导航视图
- 如何在iOS中使用Swift编程segue
- Swift -整数转换为小时/分钟/秒
- Swift:声明一个空字典
- 为什么ARC仍然需要@autoreleasepool ?
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 如何从UIImage (Cocoa Touch)或CGImage (Core Graphics)获取像素数据?
- 在Swift中如何调用GCD主线程上的参数方法?
- NSLayoutConstraints是可动画的吗?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- CFNetwork SSLHandshake iOS 9失败
- 请求失败:不可接受的内容类型:文本/html使用AFNetworking 2.0