UIViewController 没有被释放

Posted

技术标签:

【中文标题】UIViewController 没有被释放【英文标题】:UIViewController not being deallocated 【发布时间】:2011-11-03 16:14:01 【问题描述】:

我正在尝试将自定义 UIViewController 类弹出到导航控制器,然后当不再查看弹出的控制器时,将其释放。但是,视图控制器仍然存在,我不知道为什么。任何帮助将不胜感激。

界面:

@property (nonatomic, retain) CustomViewController *viewcontroller;

实施:

CustomViewController *vc = [[CustomViewController alloc] initWithNibName:@"CustomViewController" bundle:nil];

self.CustomViewController = vc;

[vc release]; // Release this after setting property to avoid memory leak.

[[self navigationController] pushViewController:[self.CustomViewController autorelease] animated:YES];

// Push in the next view. My thinking is that since pushViewController retains this view, if I autorelease when I send the view, the only thing still retaining the view when it shows up will be the navigation controller, and thus when it is bounced back off of the navigation stack, it should be deallocated. But apparently that's not happening..

【问题讨论】:

【参考方案1】:

你的 alloc 和 init 给它一个保留计数 1,通过 CustomViewController 属性再次给它一个保留消息,把它带到 2。

您需要在某个时候执行以下操作才能发布......

self.CustomViewController = nil;

虽然我不确定您为什么要在事件中存储对它的引用...?!

【讨论】:

我同意,除非您有特殊原因,否则您不应该存储对新 ViewController 的引用。 你知道吗,这是我的一个严重疏忽...我只是要将它作为特定函数中的实例变量。不过谢谢! 所以我把函数改成了 CustomViewController *vc = [[CustomViewController alloc] initWithNibName:@"CustomViewController" bundle:nil]; [[自导航控制器]pushViewController:vc]; [vc 发布];当它从 navigationController 中移除时仍然没有被释放,这是否意味着 CustomViewController 中可能正在进行一些伪劣的内存管理?

以上是关于UIViewController 没有被释放的主要内容,如果未能解决你的问题,请参考以下文章

设置 rightBarButtonItem 禁止 UIViewController 被释放

UIViewController 在 dealloc 时不释放子视图(使用 ARC)

ios: uiviewcontroller 的主视图啥时候会被释放?

UIViewController 在解除先前呈现的模态视图控制器后被释放

如何列出所有实时(未释放)的 UIViewControllers?

对象可能在被释放后被修改