Gev*_*yan 7 iphone objective-c ipad application-restart
可能重复:
强制iphone应用程序以编程方式重新启动
如何以编程方式重新启动/重新打开iphone/iPad应用程序
注意:
虽然这已经被低估了,但我认为这对于一个新的iOS开发人员来说是一个非常有效的问题.有一种方法可以从用户的角度"重新启动"您的应用程序,这在技术上不会重新启动或退出iOS应用程序.正如其他答案所指出的,iOS应用程序永远不会明确退出,因为iOS上不允许这样做.
我的答案:
如果你希望你的应用程序回到启动时的状态,这不是100%可能的,但我会解释一种方法,以获得足够的所有有效目的的大部分方式.
首先要做的是重新创建根视图控制器.我建议从app委托中的方法执行此操作,如下所示:
- (void)resetAppToFirstController
{
self.window.rootViewController = [[MyMainViewController alloc] initWithNibName:nil bundle:nil];
}
Run Code Online (Sandbox Code Playgroud)
在许多情况下,这已经足够了,但是您应该在此方法中重置您拥有的任何应用程序状态.例如,注销用户,重置任何非持久状态,并取消(释放)您可以使用的所有对象.此方法还可用于初始创建第一个视图控制器application:didFinishLaunchingWithOptions.
框架类和单身人士:
您将无法完全重置任何框架单例或每个应用程序实例的状态,例如:
[UIApplication sharedApplication];
[NSNotificationCenter defaultCenter];
[NSUserDefaults standardUserDefaults];
[UIScreen screens];
// etc...
Run Code Online (Sandbox Code Playgroud)
这可能很好,因为你不应该在这些中存储任何非持久状态(除了NSNotificationCenter,但是当释放对象时应该删除所有已注册的观察者).如果您确实要初始化或重置任何框架状态,可以使用相同的resetAppToFirstController方法执行此操作.无论如何,应该没有必要重新创建这些或window对象.
如果你有自己的单身,你可以通过将它们存储在一个单例持有者类(它本身就是一个真正的单例)中来重新创建它们.从概念上讲,这是一个简单的单例类,其中包含每个其他单例的属性和areset取消并释放它们的方法.您的其他单身人士应该使用此类(而不是静态或全局变量)来存储单例实例.如果您使用任何第三方库,请小心,因为他们也可能使用单例,您需要确保这些库也使用您的单件持有人,以便您可以根据需要重置它们.我认为这种技术无论如何都是很好的做法,因为在某些情况下(例如单元测试)你确实需要通常是单身的物体消失并重新初始化为原始状态.但是,您不希望将单例实现与单例持有者耦合,因此实现此目的的一种好方法是使用NSMutableDictionary作为关联对象的[UIApplication sharedApplication]将单例类名称作为键.但是,我有点偏离主题,因为这是一个超出这个问题范围的更先进的技术.
就用户而言,上述内容应足以"重置"您的应用程序.如果您想要作为第一个视图控制器,甚至可以再次显示启动画面.
| 归档时间: |
|
| 查看次数: |
9538 次 |
| 最近记录: |