因此,经过深思熟虑并在花时间尝试搜索内存管理问题时有点沮丧后,我做了一些研究,最终屈服于更改为 ARC。而且相对无痛。然而,一个与我的 UIViewControllers 相关的新问题浮出水面,弧前它们都像宣传的那样工作,我将它们推入堆栈,它们出现了,我将它们从堆栈中弹出,调用了他们的 dealloc 方法,每个人都很高兴。切换到 ARC,永远不会调用 dealloc。这是不幸的。所以我对这个问题做了一些研究,让我列出我在做什么和/或不做什么
.firstly,我推入堆栈的视图没有明确声明为强。
. 子类拥有的父类的委托是 unsafe_unretained,但是为了覆盖基础,我什至注释掉了将委托设置为父类,这并不令人高兴。
. 关闭 NSzombies 显然这会导致东西停留在启用 ARC 的代码中
.我改变了我的代码,根据布拉德·拉森斯在内存中的答案未在 ios 视图层次结构中发布,从此
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 ,我也读过它是自我保留的,因此当涉及代码块时,您应该使用弱参考。
我被难住了,谁能解释一下ARC在做什么?或者我不尊重使用ARC做什么?并且为了将来参考,您想要推送到 ARC 中视图层次结构的所有视图都不是实例变量吗?
提前致谢。