iPhone:离开应用程序的正确方法是啥?
Posted
技术标签:
【中文标题】iPhone:离开应用程序的正确方法是啥?【英文标题】:iPhone: What is the correct way to leave an Application?iPhone:离开应用程序的正确方法是什么? 【发布时间】:2010-08-22 07:34:21 【问题描述】:大家好,
在 ios 4 中,iPhone 支持多任务处理,这非常好,但我不想在我的应用程序中支持。我的意思是,当用户按下主页按钮时,我希望我的应用程序完成而不是进入后台。在 iOS 4 中,当用户按下主页按钮时,应用程序调用 applicationDidEnterBackground: 委托的方法进入后台,并且为了在用户按下主页按钮时“强制”应用程序完成,我已经完成了以下操作实现:
- (void)applicationDidEnterBackground:(UIApplication *)application
//save everything...
exit(0);
问题: 我注意到,exit(0) 会立即完成应用程序,而无需调用像“dealloc”这样的解除分配方法,我认为这不是一种好的编程风格。所以我想问你们,如何让应用程序以“更好”的方式完成。
提前致谢。
【问题讨论】:
Proper way to exit iPhone application?的可能重复 你会在这里找到答案:***.com/questions/3268182/… - 是的,exit(0)
不是退出 iOS 应用程序的正确方法。
【参考方案1】:
你真正想要的不是退出应用程序(如前所述不允许),而是告诉操作系统你宁愿你的应用程序被杀死而不是后台运行。
有一个 info.plist 键,UIApplicationExitsOnSuspend。在您的 info.plist 中将其设置为 TRUE(选中),然后当您的应用进入后台时,它将被终止。
【讨论】:
这是正确的,但实际上,您为什么不想至少支持快速应用切换?它可以帮助用户,并且不难实现。请记住,快速应用程序切换不会占用 CPU 周期或浪费电池。该应用程序没有运行,它只是冻结在内存中。让操作系统决定何时完全杀死它。它足够聪明。 感谢 Helmstetter 和 Pumbaa80 的回答,您给了我比我预期的更好的答案。是的,Info.plist 上的这个布尔值对我有用。 @Joost Schuur:是的,我可以,但它不会改变一切:当程序激活或“已完成加载”时,它必须从服务器上传一个 xml 以显示它的内容。因此,实现多任务处理并不是什么大问题。多任务处理取决于您的目标和设计模式。 您应该停止将其视为“多任务处理”。快速应用程序切换是指在您侧向跟踪到另一个应用程序后返回应用程序时提高应用程序的响应能力。您加载的这个 XML 数据多久会过期?如果有人加载您的应用程序,在其中花费 30 秒,检查电子邮件然后返回,您可以不使用数据的旧副本吗?当应用程序从头开始重新启动时,为什么要重新加载它?这与在后台运行应用程序无关。这是关于启动体验。【参考方案2】:这是两个问题:
如何以编程方式退出 iPhone 应用 - 重复
Proper way to exit iPhone application?
如何在 iOS4 中让 iPhone 应用不进入后台:
将 UIApplicationExitsOnSuspend
键添加到您的 info.plist 并将其值设置为 YES
http://developer.apple.com/iphone/library/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW23
【讨论】:
【参考方案3】:上面的一个答案说“有一个 info.plist 键,UIApplicationExitsOnSuspend。在你的 info.plist 中将它设置为 TRUE(选中),然后当你的应用程序进入后台时,它将被终止。”在 Xcode 4 中,info.plist 值为布尔类型的“应用程序不在后台运行”,因此将其设置为 YES 将使应用程序在用户按下“主页”按钮时退出。
【讨论】:
【参考方案4】:你不被允许。我从经验中知道:因为我已经退出而被 Apple 拒绝了(那是两年半前的事,但我怀疑他们已经改变了这里的政策)。 UIApplication,IIRC上有一个“私有”(即头文件中未提及)方法“终止”。但苹果说你可能不会那样做。您唯一能做的就是显示一个对话框,要求用户按下主页按钮。但反过来,如果在启用了多任务处理的设备上不起作用......所以我猜你真的必须改变你的应用程序,以便你可以丢弃你在 applicationDidEnterBackground 上的状态并在 applicationDidBecomeActive 上重新启动应用程序。
【讨论】:
实际上,我们可以在 iOS 4 中将应用程序排除在后台功能之外——这只是如何做到这一点的问题。请参阅上面链接的欺骗问题。 到目前为止,我已经看过两个带有退出按钮的游戏,我真的很讨厌这些程序。但您不必支持多任务处理。以上是关于iPhone:离开应用程序的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
iPhone:viewDidDisappear 的正确用法是啥?
当只有一些有 imageView 时,对齐 UITableViewCells 的正确方法是啥?
通过 Swift 在 iPhone (iOS) 开发中存储/检索用户数据(读/写文件)的正确方法是啥?