什么是呈现序列视图控制器的最佳方式,用户可以随机来回跳转

时间:2011-11-01 02:48:11

标签: iphone ios ipad uiviewcontroller

我的应用程序涉及许多视图控制器,其中一些是内存重置的视图控制器。

用户流程就像从家庭视图控制器开始一样,用户将点击一系列视图控制器(我使用presentModalViewControler进行转换)。有时,用户会点击一个菜单栏或其他东西返回到他/她过去经历过的某个视图控制器,或者跳转到尚未呈现的视图控制器。所以,它就像: A-> B-> C-> D-> B-> D-> E-> F-> C- I标记...

我现在正在做的是:无论用户在哪里,当他/她需要跳转到其他视图控制器时,我只是实例化目标视图控制器,并将其作为模态视图控制器呈现。

嗯,它运行良好,但是使用Instruments,我发现自应用启动以来分配的内存堆不断增加。我的猜测是,parentViewController(或iOS 5中的presentsViewController)永远不会被释放,因为它位于模态呈现堆栈的根或中间,所以它就像继续添加viewcontroller实例一样。

因此,我意识到我做错了。如果有人能指出我做这样的应用程序的正确方向,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

当您以模态方式呈现视图控制器时,父视图控制器会保持不变。这就是每次用户导航到另一个视图控制器时内存使用量增长的原因。

尝试使用UINavigationController作为窗口的根视图控制器。使用A视图控制器作为导航控制器的根视图控制器。然后,当您想要转到B视图控制器时,请执行此操作(在当前视图控制器的某种方法中):

UIViewController *b = [[BViewController alloc] init...];
[self.navigationController setViewControllers:[NSArray arrayWithObject:b] animated:YES];

只要您不对A或B视图控制器保留任何其他引用,就应该在它们不再可见时取消分配。