UITabBarController与带按钮的UIViewController就像一个标签 - 内存问题

时间:2014-05-26 15:22:46

标签: ios objective-c memory uitabbarcontroller

我尝试通过创建视图控制器来创建自定义标签栏控制器,然后在屏幕底部添加按钮。在这个VC中,我将引用其他4个视图控制器,并在用户单击按钮时切换它们。与使用UITabBarController相比,我不确定这种方法是否会造成任何问题。 我需要这样做,因为中间的标签按钮中会有一个3D对象,我想我不能用默认的UITabBarController来做这件事。 我想的是这种方法会导致内存不足问题,因为我在内存中保留了太多的对象(4个视图控制器),并且每个视图控制器都有大量的图像和图像。动画片。不确定这是否与UITabBarController相同,或者Apple在这里有一些处理内存管理的好方法。 请帮忙!

感谢。

1 个答案:

答案 0 :(得分:1)

总的来说,如果这还不是一个明显的问题,我认为你过早地进行了优化。如果您使用UIViewController ContainmentA good guide here)正确实施容器,则不应该有任何内存问题。

该文章的例子:

当您添加子视图控制器(切换到"选项卡")时,您可以执行以下操作:

UIViewController *newTabViewController = [UIViewController new];

[self addChildViewController:newTabViewController];
[self.view addSubview:newTabViewController.view];
[newTabViewController didMoveToParentViewController:self];

然后,当您从选项卡转换以及上面的代码转到新选项卡时,您会这样做:

[oldTabViewController willMoveToParentViewController:nil];
[oldTabViewController.view removeFromSuperview];
[oldTabViewController removeFromParentViewController];

使用包含API将调用正在转换的viewcontrollers上的所有相应视图生命周期方法(viewWillAppear: viewDidAppear: viewWillDisappear: viewDidDisappear:

为了使您的各个标签更具内存效率,请务必在viewDidDisappear:中进行适当的清理,然后在viewDidAppear:中重建。

尽管如此,这可能不是一个问题,除非您的个人视图控制器在内存中保留非常大的图像或类似的东西。您必须记住,所有现有容器还会将所有视图控制器保留在内存中而不会出现问题。