重新加载选项卡栏控制器中的所有视图控制器

时间:2012-08-16 11:09:00

标签: ios cocoa-touch ios5 uitabbarcontroller uitabbar

我有一个带有UITabBarController和7个视图控制器的iPad应用程序。

这是我的applicationDidFinishLaunching:

// Override point for customization after application launch.
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.delegate = self;
self.tabBarController.viewControllers = [self createViewControllers];
self.window.rootViewController = self.tabBarController;

这也在我的appDelegate中:

- (NSArray *)createViewControllers
{
    MyView1 *viewController1 = [[MyView1 alloc] initWithNibName:@"MyView1" bundle:nil];
    MyView2 *viewController2 = [[MyView2 alloc] initWithNibName:@"MyView2" bundle:nil];
    MyView3 *viewController3 = [[MyView3 alloc] initWithNibName:@"MyView3" bundle:nil];
    MyView4 *viewController4 = [[MyView4 alloc] initWithNibName:@"MyView4" bundle:nil];
    MyView5 *viewController5 = [[MyView5 alloc] initWithNibName:@"MyView5" bundle:nil];
    MyView6 *viewController6 = [[MyView6 alloc] initWithNibName:@"MyView6" bundle:nil];
    MyView7 *viewController7 = [[MyView7 alloc] initWithNibName:@"MyView7" bundle:nil];

    NSArray *views = [NSArray arrayWithObjects:viewController1, viewController2, viewController3, viewController4, viewController5, viewController6, viewController7, nil];

    return views;
}

在任何时候,我都希望用户能够完全重新加载这些视图控制器,因此所做的任何更改,正在进行的任何动画,任何子视图等都会从内存中刷新,并且视图控制器都会重新加载。

我发现最简单的方法是在appDelegate中添加一个摇动手势。摇动手势弹出一个UIAlertView,询问“你想重置一切吗?”如果是,则会发生这种情况:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1) {

        self.tabBarController.viewControllers = [self createViewControllers]; // <-- this happens

        // some of the other things I've tried
//        [self.tabBarController setViewControllers:[self createViewControllers] animated:YES]; // same as above but with animation

//        self.tabBarController = [[UITabBarController alloc] init]; // allocations go crazy!
//        self.tabBarController.delegate = self;
//        self.tabBarController.viewControllers = [self createViewControllers];
//        self.window.rootViewController = self.tabBarController;
    }
}

我用新创建的集替换视图控制器数组。你可以看到我尝试过的其他几件事。

我不明白为什么每次执行重置时,乐器中的分配都会上升(并保持不变)并且应用程序开始变慢。我重置的越多,它就越慢,直到它变得无法使用。

我正在使用ARC,每次刷新标签栏控制器中的视图控制器时,我都希望它能够处理内存管理。然而,无论我怎么做,每次刷新都会占用更多的内存。

什么可能会减慢一切?

0 个答案:

没有答案