如何重新启动我的iPhone应用程序

8

1
看这个:https://dev59.com/jm855IYBdhLWcg3wViy3 - Alexey Petushkov
2个回答

6

注意:

尽管这个问题已经被踩过,但我认为对于一个新的iOS开发者来说,这是一个完全合理的问题。有一种方法可以从用户的角度“重新启动”你的应用程序,而这不是 技术上 的重新启动或退出iOS应用程序。正如其他答案所指出的那样,iOS应用程序不应明确退出,因为这在iOS上是不允许的。

我的答案:

如果你想让你的应用程序回到启动时的状态,这并非完全可能,但我将解释一种可行的方式,可以实现大部分功能,足以满足所有有效的目的。

第一件事是重新创建你的根视图控制器。我建议使用应用程序委托中的方法来执行此操作,像这样:

- (void)resetAppToFirstController
{
    self.window.rootViewController = [[MyMainViewController alloc] initWithNibName:nil bundle:nil];
}

在许多情况下,这已经足够了,但是您还应在此方法中重置任何应用程序状态。例如注销用户、重置任何非持久状态并使您可以的所有对象为空(释放)。该方法也可用于从application:didFinishLaunchingWithOptions最初创建第一个视图控制器。
框架类和单例:
您将无法完全重置任何框架单例或每个应用程序实例的状态,例如以下内容:
[UIApplication sharedApplication];
[NSNotificationCenter defaultCenter];
[NSUserDefaults standardUserDefaults];
[UIScreen screens];
// etc...

这应该是可以的,因为你不应该在这些对象中存储任何非持久状态(除了NSNotificationCenter,但所有已注册的观察者都应该在对象释放时被移除)。如果您确实想要初始化或重置任何框架状态,可以在同一个resetAppToFirstController方法中执行。无论如何,不需要重新创建这些对象或窗口对象。
如果您有自己的单例对象,可以通过将它们存储在一个单例持有类中来重新创建它们(该类本身也是一个真正的单例)。从概念上讲,这是一个简单的单例类,具有每个其他单例的属性和一个重置方法,以使它们全部变为空值并释放。您的其他单例应该使用此类(而不是静态或全局变量)来存储单例实例。如果使用任何第三方库,请注意它们可能也使用单例,您需要确保它们也使用您的单例持有者,以便根据需要重置它们。我认为这种技术是一个好的实践,因为在某些情况下(例如单元测试),您确实希望通常为单例的对象消失并重新初始化到原始状态。但是,您不希望将单例实现与单例持有者耦合,因此一种很好的实现方式是在[UIApplication sharedApplication]上使用一个NSMutableDictionary作为关联对象,并将单例类名称作为键。不过,我有点偏离主题了,因为这是一个超出本问题范围的更高级的技术。
以上应该足以“重置”您的应用程序,就用户而言。如果需要,您甚至可以再次显示闪屏屏幕作为您的第一个视图控制器。

http://stackoverflow.com/a/30647435/793880 - Savas Adar

0

不,没有办法通过编程重新启动iOS应用程序。 应用程序的生命周期由操作系统控制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接