1

我正在使用我的 appDelegate 的applicationDidReceiveMemoryWarning方法来转储一些高资源对象。当应用程序重新启动时,而不是尝试仅重新加载这些对象并将用户返回到他的最后一页,我只想从顶部重新启动应用程序(从主页开始,应用程序只进入一级深度,所以这对我们来说是完全可以接受的)。

这是我微不足道的尝试,但它是一个可悲的失败。它接近了,但我最终引入了一些导致实际内存转储和应用程序崩溃的问题。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    self.viewController = [[SplashScreenViewController alloc] initWithNibName:@"SplashScreenViewController" bundle:nil];
    UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = navcon;
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    //For testing purposes only
    self.lowMemoryWarning = TRUE;
    NSLog(@"app did enter background");
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    NSLog(@"app will enter foreground");
    if (self.lowMemoryWarning) {
        NSLog(@"recovering from low memory warning");
        self.window.rootViewController = nil;
        UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:self.viewController];
        self.window.rootViewController = navcon;
        [self.window makeKeyAndVisible];
    }
}

做这样的事情的最佳方法是什么?是否有一个我不知道的简单技巧?

谢谢!

4

1 回答 1

0

您的意思是您希望应用程序在每次启动(或进入前台)时重新启动?如果是,也许您可​​以将应用程序设置为不支持多任务处理

http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW5

搜索“退出后台执行”

==================================================== ===============================

啊抱歉,我不知道你的应用程序的性质,如果某些进程需要在后台运行,那么这种方法是行不通的。

我在上面阅读了您关于 UIActivityIndi​​cator 的评论 + 在应用程序进入前台后将某些对象加载回当前视图。也许这个线程可以帮助你,当应用程序进入前台时找到当前视图。IOS

于 2013-01-05T16:21:38.527 回答