【发布时间】:2012-12-10 06:24:51
【问题描述】:
因此,经过深思熟虑并在花时间尝试搜索内存管理问题时有点沮丧后,我做了一些研究,最终屈服于更改为 ARC。而且相对无痛。然而,一个与我的 UIViewControllers 相关的新问题浮出水面,弧前它们都像宣传的那样工作,我将它们推入堆栈,它们出现了,我将它们从堆栈中弹出,调用了他们的 dealloc 方法,每个人都很高兴。切换到 ARC,永远不会调用 dealloc。这是不幸的。所以我对这个问题做了一些研究,让我列出我在做什么和/或不做什么
.首先,我推入堆栈的视图没有明确声明为强。
. 子类拥有的父类的委托是 unsafe_unretained,但是为了覆盖基础,我什至注释掉了将委托设置为父类,不高兴。
. 关闭 NSzombies 显然这会导致东西停留在启用 ARC 的代码中
.根据布拉德·拉森在Memory not released in ios view hierarchy 中的回答,我从这里更改了我的代码
if (_friendsListVC == nil)
{
_friendsListVC = [[FriendsListViewController alloc] initWithNibName:nil bundle:nil];
_friendsListVC.delegate = self;
}
[self.navigationController pushViewController:_friendsListVC animated:YES];
(_friendsListVC 是一个成员变量)。至此
FriendsListViewController *fVC = [[FriendsListViewController alloc] initWithNibName:nil bundle:nil];
//fVC.delegate = self;
[self.navigationController pushViewController:fVC animated:YES];
再次没有 Joy,dealloc 断点永远不会被击中,问题是我在我的应用程序中推送和弹出了很多视图,所以这只会导致更多的内存问题,除了我改用 ARC 的那些希望修复...
另外请注意,我在这个视图中有一些代码块以及其他一些代码块,但我不使用 self,我也读到它是自我保留的,所以当涉及到代码块时,你应该弱 ref。
我被难住了,谁能解释一下 ARC 在做什么?或者我不尊重使用 ARC 做什么?并且为了将来参考,您想要推送到 ARC 中视图层次结构的所有视图都不是实例变量吗?
提前致谢。
【问题讨论】:
标签: ios uiviewcontroller automatic-ref-counting dealloc