【问题标题】:what's the best way of presenting a sequence viewcontrollers which user can jump back and forth randonmly呈现用户可以随机来回跳转的序列视图控制器的最佳方式是什么
【发布时间】:2011-11-01 02:48:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: iphone ios ipad uiviewcontroller


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,我会试试这个方法。永远不知道 navigationController 可以做到这一点。但是,我是否仍然具有通过呈现 ModalViewController 获得的淡入过渡效果?
    猜你喜欢
    • 2015-02-02
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2016-02-03
    相关资源
    最近更新 更多