首先,我为我糟糕的英语感到抱歉。我会试着解释我的问题:
我有一个RootViewController (基于导航的项目)。因此,它显示表视图,当用户选择表(didSelectRowAtIndexPath) y的一行时,执行以下操作以显示下一个视图:
NextViewController *nextView = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
[self.navigationController pushViewController:nextView animated:YES];
[nextView release];如果用户选择导航栏的back按钮并再次选择该行,并重复执行此操作,会发生什么情况?是否正在创建大量新视图(NextViewController实例)(大量内存分配)?或者他只是在堆栈中导航?
你能帮帮我吗?我不想这样浪费内存(如果是这样的话)。谢谢!
发布于 2011-01-29 03:46:21
如果用户重复地在RootViewController和NextViewController之间来回切换,将会发生以下情况:
didSelectRowAtIndexPath:方法中创建(alloc'd)的。因为您在其上调用了init方法,所以您负责释放它。nextView推送到导航控制器堆栈上,该堆栈将保留它。< NextViewController >H19您释放nextView,因此唯一具有保留的是您的用户从NextViewController移回的导航‘re,导航控制器将释放它。现在没有任何内容保留nextView,因此它获得dealloc'd。内存已释放。
基本上,您确实在用户每次来回移动时创建了一个NextViewController (您并不是“只是在堆栈中导航”,因为对象每次都在改变),但是您不会泄漏大量内存,也不会占用您创建的每个控制器。您的内存使用量在这里是正常的。
https://stackoverflow.com/questions/4832339
复制相似问题