我有两个视图控制器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发布]。它工作正常。但什么时候能释放记忆。内存在导航控制器中的处理方式。
答案 0 :(得分:1)
简单回答:您应该使用ARC 。
如果由于某种原因你不能,你的视图控制器一旦从堆栈中弹出就会被解除分配,你应该在每次想要将它推入堆栈时分配/初始化一个新的视图控制器。或者,如果您不想这样做 - 比如说,如果VC2中的视图非常重 - 请删除[vcObject release]
并在VC1中保留对vcObject
的引用,并继续推送同一个在堆栈上。但是,请确保不要将这两者混合在一起;如果每次在将对象推入堆栈后必须将其释放,则创建一个新对象,并且如果每次都保持引用同一个VC2,则必须在VC1的dealloc
之前释放它。 。请记住,必须在VC1的dealloc
方法中释放它,否则内存将被泄露。
但是,真的。 您应该使用ARC。
答案 1 :(得分:1)
如果您不使用[vcObject release]
。它会导致内存泄漏到您的应用程序中。
所以,这是使用push / pop viewController处理内存管理的方法,而不使用 ARC
VC2 *vcOject = [[VC2 alloc] init];
[[self.navigationController pushViewController:vcOject animated:YES] autorelease];