如何使用其所有视图控制器发布UITabBarController?

时间:2011-09-15 08:52:43

标签: iphone objective-c cocoa-touch uitabbarcontroller

我以编程方式创建一个带有两个视图控制器的标签栏,如下面的代码。当我不再需要标签栏时,我发现很难清理内存。关于发布标签栏控制器,Apple的文档非常有限。我不知道如何释放'viewControllers'数组中的所有视图控制器。我试图打印出保留计数,发现x& y的retainCount高达5.

@interface X:UIViewController
@interface Y:UIViewController

@interface Z: UIViewController {
  UITabBarController *tabBar; 
}
@end

@implementation Z
-(IBAction)openTabBarUp{
  UITabBarController *tabBar = [[UITabBarController alloc] init];

  X *x = [[X alloc] init];
  Y *y = [[Y alloc] init];

  tabBar.viewControllers = [NSArray arrayWithObjects: x, y, nil];
  [self.view addSubView: tabBar.view];

}

这就是我尝试释放内存的方式:

-(IBAction)removeTabBar{
  [tabBar.view removeFromSuperView];
  [tabBar release];
  tabBar = nil;
}

谢谢

利奥

1 个答案:

答案 0 :(得分:1)

-(IBAction)openTabBarUp{
  tabBar = [[UITabBarController alloc] init];

  X *x = [[X alloc] init];
  Y *y = [[Y alloc] init];

  tabBar.viewControllers = [NSArray arrayWithObjects: x, y, nil];
  [self.view addSubView: tabBar.view];

}

您在UITabBarController *tabBar = [[UITabBarController alloc] init];方法中需要openTabBarUp,因为您已经在头文件中声明了它的实例。您可以使用[tabBar release];释放tabBar,但Apple坚持将tabBarController添加为主窗口的根视图,而不是任何视图控制器的一部分。

<强>更新

Apple reference documents on UITabBarController

  

部署标签栏界面时,必须将此视图安装为   窗口的根。与其他视图控制器不同,是一个标签栏   接口永远不应该作为另一个视图的子项安装   控制器。