我有一个带有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,每次刷新标签栏控制器中的视图控制器时,我都希望它能够处理内存管理。然而,无论我怎么做,每次刷新都会占用更多的内存。
什么可能会减慢一切?