【问题标题】:How do I destroy a view that is added by pushViewController?如何销毁 pushViewController 添加的视图?
【发布时间】:2011-04-07 22:31:04
【问题描述】:

通过pushViewController方法添加视图后,导航栏中会有一个返回按钮,用于将视图弹出堆栈。但是,似乎iOS在将视图从堆栈中弹出后不会销毁视图,那么它什么时候会被销毁?弹出视图时可以手动销毁吗?

【问题讨论】:

    标签: iphone ios uiviewcontroller uinavigationcontroller pushviewcontroller


    【解决方案1】:

    一般模式是这样的:

    - (void)pushSomeViewControllerOnStack
    {
        SomeViewController* someViewController = [[SomeViewController alloc] initWithNibName:@"SomeView" bundle:nil];
        [self.navigationController pushViewController:someViewController animated:YES];
        [someViewController release];
    }
    

    换句话说,导航控制器将自己处理视图控制器的retain,这意味着您需要自己处理release,因为有一个init。导航控制器也会在适当的时候释放这个控制器。

    【讨论】:

    • 感谢Shaggy Frog,但我的问题是view现在只能通过系统自动释放机制释放,弹出view的时候可以手动释放吗?
    • 第一个视图控制器是从堆栈中弹出的,而不是视图。其次,视图控制器注意释放它们的关联视图;您不必担心以您描述的方式发布视图。
    【解决方案2】:

    您应该在您的UIViewController 子类中实现viewDidUnloaddealloc 方法。

    UINavigationController 将视图控制器从其堆栈中弹出时,将执行这些方法中的代码。

    您应该阅读 Apple 的 iOS 开发人员库中的 View Controller Programming Guide for iOS: Navigation Controllers 文档以及 UINavigationControllerUIViewController 类的类参考文档,以便您更好地了解视图控制器的生命周期以及在各种情况下会发生什么应用程序事件发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-06
      • 2015-05-16
      • 1970-01-01
      • 2012-01-12
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多