1

我有两个视图控制器 VC1 和 VC2。我尝试通过创建 VC2 的对象并按按钮操作来推动 VC2。

VC2 *vcOject = [[VC2 alloc]init];
[self.navigationController pushViewController:vcOject animated:YES];
[vcObject release];

在 VC2 中,我在按钮操作中弹出它..

[self.navigationController popViewControllerAnimated:YES];

现在我在 VC1 中并再次推送 VC2 进行显示。但这次我收到 EXC_BAD_ACCESS 错误。但是当我评论 [vcObject release] 时。它工作正常。但是我什么时候可以释放内存。导航控制器中的内存是如何处理的。

4

2 回答 2

1

如果你不使用[vcObject release]. 它会导致内存泄漏到您的应用程序。

所以,这是在不使用ARC的情况下使用 push/pop viewController 处理内存管理的方法

VC2 *vcOject = [[VC2 alloc] init];
[[self.navigationController pushViewController:vcOject animated:YES] autorelease];
于 2012-05-10T05:20:20.170 回答
1

简单的回答:您应该使用 ARC

如果由于某种原因你不能,一旦你的视图控制器从堆栈中弹出,它就会被释放,每次你想将它推入堆栈时,你应该分配/初始化一个新的。或者,如果您不想这样做 - 比如说,如果 VC2 中的视图非常重 - 摆脱您的[vcObject release]并在 VC1 中保留对的引用vcObject,并继续将相同的视图推入堆栈。不过,请确保不要将这两者混为一谈;如果您每次创建一个新对象时都必须在将其推入堆栈后释放它,并且如果您每次都保留将相同的 VC2 推入堆栈的引用,那么您必须在 VC1 之前释放它dealloc。记住一定要在VC1的dealloc方法中释放,否则内存会泄露。

但是,真的。你应该使用ARC。

于 2012-05-10T04:57:39.577 回答