2011-11-01 64 views
1

我的应用程序涉及许多视图控制器,其中一些视图控制器是内存重载视图控制器。什么是呈现序列视图控制器的最佳方式,用户可以随意跳来跳去

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

我现在正在做的是:no当用户需要跳转到其他视图控制器时,我只需实例化目标视图控制器,并将其呈现为模式视图控制器。

好吧,它运行良好,但对于Instruments,我已经确定分配的内存堆在应用程序启动后不断增加。我的猜测是父视图控制器(或iOSView中的呈现控制器)永远不会被释放,因为它位于模式展示堆栈的根或中间,所以它就像继续添加viewcontroller实例一样。

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

回答

2

当您以模态方式呈现视图控制器时,父视图控制器会停留在附近。这就是为什么每当用户导航到另一个视图控制器时,您的内存使用量都会增加。

尝试使用UINavigationController作为窗口的根视图控制器。使用您的A视图控制器作为导航控制器的根视图控制器。然后,当你想要去你B视图控制器,做这样的(在当前视图控制器的一些方法):

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

只要你不保留任何其他引用您的A或B视图控制器,当它们不再可见时,它们应该被释放。

+0

谢谢,我会尝试这种方法。永远不知道navigationController可以做到这一点。但是,我是否仍然通过呈现ModalViewController获得淡入式过渡效果? –

相关问题