【问题标题】:unload View after calling presentModalViewController?调用 presentModalViewController 后卸载视图?
【发布时间】:2011-04-14 20:11:12
【问题描述】:

我有一些视图控制器,我用以下方法调用:

myViewController *myView = [[myViewController alloc] initWithNibName:nil bundle:nil];
    myView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:myView animated:YES];
    [myView release];

如果我多次使用该应用程序,我会收到内存警告,并且该应用程序会冻结几秒钟!我认为原因是我切换了视图但没有解除旧视图!?!!?! (我将我的 outlet 设置为 nil 并释放它们)

切换到新视图后如何卸载旧视图?

提前致谢

【问题讨论】:

    标签: iphone memory-management sdk view switch-statement


    【解决方案1】:

    切换视图时,请务必在 myViewController 上调用dismissModalViewController:(BOOL)animated。

    【讨论】:

    • thanks@ all 的快速回复我目前的应用程序如此构建,我可以从每个视图切换到每个视图 - 这也是为应用程序的实现提供的。如果我使用dismissModalViewController,我只能来回走动。是否有可能正确而轻松地重建它,以便我可以释放我的记忆,但始终可以进入我想要的任何视图?
    【解决方案2】:

    在启动 modalViewController 的类中,您可以为您保留的模态视图控制器创建一个属性。然后你可以写这样的东西。

    //This would be in an action or something...
    if (self.myViewControllerProperty == nil) {
        self.myViewControllerProperty = [[[MyViewController alloc] initWithNibName:nil bundle:nil] autorelease];
    }
    
    [self presentModalViewController:self.myViewControllerProperty animated:YES];
    

    然后不是设置

    myView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

    将该代码移动到modalViewController并写self.modalTransitionStyle = UIModalTransitionStyleCoverVertical;我认为这样看起来更干净,保持每个viewcontroller的配置分开不要混淆它。

    正如 maclema 所说,请致电 dissmissModalViewController,但您可能正在这样做......

    【讨论】:

      【解决方案3】:

      可能有很多问题,但您不需要(也不能)卸载旧视图。确保在所有视图控制器的viewDidUnload 中释放对象并将出口设置为零。 viewDidUnload 将在发生内存警告时被调用,因此如果您没有正确处理它,您将有泄漏并可能崩溃。除此之外,很难知道您的应用还做了什么导致崩溃。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        相关资源
        最近更新 更多