我正在修复内存泄漏导致我的iPhone应用程序崩溃太多......
在appDelegate中,我使用以下代码来初始化tabbarcontroller。这是一个很好的方法吗,特别是“homeNavigationController.tabBarItem init”部分? (tabBarController是一个属性,在dealloc方法中释放)。
NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:4];
tabBarController = [[UITabBarController alloc] init];
// HomeTab view
HomeTabViewController *home = [[HomeTabViewController alloc] initWithNibName:@"HomeTabViewController" bundle:nil];
UINavigationController *homeNavigationController = [[UINavigationController alloc] initWithRootViewController:home];
[homeNavigationController.tabBarItem initWithTitle:NSLocalizedString(@"home", @"home") image:[UIImage imageNamed:@"home.png"] tag:1];
[localControllersArray addObject:homeNavigationController];
[homeNavigationController release];
[home release];
// My 3 others controllers
...
// End 3 other controllers
tabBarController.viewControllers = localControllersArray;
tabBarController.selectedIndex = 0;
[self.window addSubview:tabBarController.view];
[localControllersArray release];
[tabBarController setDelegate:self];
[self.window makeKeyAndVisible];
答案 0 :(得分:3)
这个
[homeNavigationController.tabBarItem initWithTitle:NSLocalizedString(@"home", @"home") image:[UIImage imageNamed:@"home.png"] tag:1];
是泄漏。你应该把它改成:
UITabBarItem *tabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"home", @"home") image:[UIImage imageNamed:@"home.png"] tag:1];
homeNavigationController.tabBarItem = tabBarItem;
[tabBarItem release]; // If you are not using ARC.
答案 1 :(得分:1)
我总是使用alloc-autorelease模式
[[[class alloc] init] autorelease];
这确保始终会调用release。如果我需要保持对象,我将它分配给具有retain set的属性或将其传递给保留的方法。
Google的iOS指南中描述了这一点: