我正在编写一个iPhone应用程序,并且需要由于某些用户操作强制退出它。在清理了应用程序分配的内存后,调用哪种适当的方法来终止应用程序?
答案:在清理了应用程序分配的内存之后,可以使用exit(0)方法来终止应用程序。
我正在编写一个iPhone应用程序,并且需要由于某些用户操作强制退出它。在清理了应用程序分配的内存后,调用哪种适当的方法来终止应用程序?
答案:在清理了应用程序分配的内存之后,可以使用exit(0)方法来终止应用程序。
在 iPhone 上,没有退出应用程序的概念。唯一会导致应用程序退出的操作是触摸手机上的 Home 按钮,而开发人员无法访问该按钮。
据苹果公司称,您的应用程序不应自行终止。由于用户没有按 Home 按钮,任何回到主屏幕都会给用户留下您的应用程序崩溃了的印象。这种令人困惑、非标准的行为应该被避免。
你尝试过使用 exit(0)
吗?
或者,[[NSThread mainThread] exit]
,虽然我没有尝试过,但这似乎是更为合适的解决方案。
exit(0)
看起来像是应用程序崩溃,因此向用户显示确认消息。在确认后,通过编程方式暂停(按下主页按钮)并等待2秒钟,同时应用程序以动画形式进入后台,然后在用户视图后退出。
-(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);
}
}
exit(0)
并不重要。重点是你的应用程序具有“退出行为”。除了由非常重要的第三方制作的一些应用程序之外,AppStore禁止退出行为本身。此外,模仿主页按钮行为也可能会被拒绝。 - eonil查看此处的问答:https://developer.apple.com/library/content/qa/qa1561/_index.html
问:如何以编程方式退出我的iOS应用程序?
iOS没有为优雅地终止iOS应用程序提供API。
在iOS中,用户按Home按钮关闭应用程序。如果您的应用程序在某些条件下无法提供其预期功能,则建议的方法是为用户显示一个提示,指示问题的性质和用户可以采取的可能行动 - 打开WiFi、启用位置服务等,并允许用户自行决定是否终止应用程序。
警告:不要调用
exit
函数。调用exit
的应用程序将会出现崩溃,而不是执行优雅的终止并动画返回到主屏幕。此外,由于调用exit,可能无法保存数据,因为
-applicationWillTerminate:
和类似的UIApplicationDelegate
方法将不会被调用。如果在开发或测试期间需要终止应用程序,则建议使用
abort
函数或assert
宏。
这并不是退出程序的方法,而是强制让人们退出的方法。
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];
进入您的info.plist文件,检查“应用程序不在后台运行”这个键。这样,当用户点击主屏幕按钮时,应用程序会完全退出。
application-info.plist
中添加UIApplicationExitsOnSuspend
属性,并将其设置为true
。[UIApplication sharedApplication]
会导致应用程序看起来像是崩溃了,但它会在这样做之前调用- (void)applicationWillTerminate:(UIApplication *)application
;exit(0);
也会终止应用程序,但它看起来很“正常”(SpringBoard的图标以预期的方式显示,并带有缩放效果),但不会调用- (void)applicationWillTerminate:(UIApplication *)application
委托方法。- (void)applicationWillTerminate:(UIApplication *)application
方法。exit(0);
。用户有意退出时,您的ApplicationDelegate会收到通知:
- (void)applicationWillResignActive:(UIApplication *)application {
exit(0);
它是执行所有工作的程序。最好的事情是用户想要退出,这就是为什么在那里调用它不应该成为一个问题。
在我的音频应用中,当人们在音乐仍在播放时同步他们的设备后,需要退出应用程序。一旦同步完成,我会收到通知。但是,在那之后立即退出应用程序实际上看起来像是崩溃了。
因此,我设置了一个标志,在下一次后台操作时真正退出应用程序。这对于同步后刷新应用程序是可以的。