【问题标题】:releasing UIViewControllers释放 UIViewControllers
【发布时间】:2011-08-01 08:47:31
【问题描述】:

我在我的应用程序中使用了 3 个 UIViewController,现在我想知道当我切换到另一个时释放它们是否是个好主意。显然,这将是隐藏的那些我真的不需要它们,而它们不可见...... 切换视图,我使用这样的东西(uiwindow):

//this is in the first UIViewController
[[[UIApplication sharedApplication] keyWindow] addSubview:secondController.view];
[self.view removeFromSuperview];
//here I release the view controller
[self release];

所以我的问题...这真的值得吗?可能是什么性能问题?

另外,我想问一下是否有人知道为什么这些行按此顺序工作(见下文)。我尝试了相反的方法,但停止工作的方向有问题?有什么提示吗?

//working
[[[UIApplication sharedApplication] keyWindow] addSubview:secondController.view];
[self.view removeFromSuperview];

//not working
[self.view removeFromSuperview];
[[[UIApplication sharedApplication] keyWindow] addSubview:secondController.view];

谢谢

劳尔

【问题讨论】:

    标签: iphone cocoa-touch uiviewcontroller uikit uiwindow


    【解决方案1】:

    ...真的值得吗?可能是什么性能问题?

    一旦将视图控制器添加为另一个视图(超级视图)的子视图,您就可以很好地释放它,在这种情况下,超级视图会保留子视图。 [[UIApplication sharedApplication] keyWindow]secondController.view的superView,它保留了secondController.view。所以,这是一种正确的做法,不会导致任何性能问题。

    【讨论】:

    • 是的..我明白了..谢谢@EmptyStack ;)..另外,我刚刚读到 removeFromSuperView 确实释放了对象(视图)..因此我所说的释放调用不会'不需要...现在如果我使用保留创建一个 uiviewcontroller 怎么办?...比如说UIVIewController *uCtrl = [[[UIViewController alloc] init] retain]...按照 Apple 指南我应该释放对象...不是吗?
    • 我刚刚意识到 removeFromSuperView 发布的是 UIView 而不是 UIViewController...我检查了 Apple 文档,他们说如果您保留视图..您必须调用 release..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多