一个 viewController 被推入另一个 viewController 后会发生啥

Posted

技术标签:

【中文标题】一个 viewController 被推入另一个 viewController 后会发生啥【英文标题】:What happens after a viewController is pushed into another viewController一个 viewController 被推入另一个 viewController 后会发生什么 【发布时间】:2012-04-05 14:16:37 【问题描述】:

我只是在编程时想知道。我有一个创建 childViewController 实例的 rootViewController。这个 childVC 通过 [self.navigationController pushViewController:childVC] 从另一个 childViewController(比如 childVC2)推送到我的 rootViewController。现在我想知道我的 childVC2 实例会发生什么。它会被释放吗?因为当从 childVC 返回 childVC2 时,我创建了一个 childVC2 的新实例并将其推送到我的 rootViewController 中。显然,我对 childVC2 的早期实例没有任何用处,那么它会发生什么,或者我可以手动释放它吗?

【问题讨论】:

【参考方案1】:

是的,如果你分配了 ViewController,你必须释放它.. 推送会将其引用计数增加 1,因此你必须确保将其弹出以减少引用计数.. 并创建实例在 .h 中定义它,并在创建时这样做

if(yourViewController)
  [yourViewContoller release];

yourViewController = [yourViewControllerClass alloc] init];

另一种选择是让它自动释放,在这种情况下你不负责释放 ViewController

yourViewController = [yourViewControllerClass alloc] init]autorelease];

【讨论】:

谢谢!但如果我使用 ARC,我的程序会自动为我做这件事,对吗? 是的,如果您使用 ARC,请不要担心释放对象。ios 会处理它。

以上是关于一个 viewController 被推入另一个 viewController 后会发生啥的主要内容,如果未能解决你的问题,请参考以下文章

ViewController - (0,0) 处的主视图元素被导航栏遮挡

我们如何在不将 ViewController 对象推入其中的情况下将对象分配给 `UINavigationController`。

如何判断我的 ViewController 何时再次成为栈顶?

使用 SearchController 推送 ViewController 在搜索栏下显示黑色矩形

单击按钮导航到root viewcontroller

关闭模态呈现的 VC 和弹出呈现的 VC