我希望在推送视图控制器后,我需要释放我对视图控制器的所有权,就像我在下面所做的那样。
CustomViewController *nextViewController = [[CustomViewController alloc] initWithNibName:@"CustomView" bundle:nil];
[[self navigationController] pushViewController:nextViewController animated:YES];
[nextViewController release];
在我这样做之后,我假设导航控制器拥有该对象的所有权,并在完成后将其释放,然后在我的customViewController上调用dealloc。当我点击导航栏上的后退按钮并且不再显示视图时,我希望会发生这种情况。但这不会发生。我在一个CustomViewController的dealloc方法中添加了一个NSLog(@“CustomViewController确实收到了dealloc”),但它永远不会打印出来。这是正常行为吗?
导航控制器是否只是在保留该对象以防万一在某些时候需要它?当内存开始耗尽时它会摆脱它吗?我尝试模拟低内存警告但没有任何反应。我有一种感觉,这个问题的答案是我不应该太担心,并遵循保留/释放/自动释放的标准程序。尽管如此,是否还有其他人深入研究了这一点并找到了绝对答案?
答案 0 :(得分:14)
“导航控制器是否只是在保留该对象以防万一在某些时候需要它?”
烨。这正是它正在做的事情。它会向您发送viewDidLoad
和viewDidUnload
条消息。这是您应该分配和释放viewcontroller使用的资源的地方。
请注意,只有在系统认为需要释放内存时才会调用viewDidUnload
。
如果您需要更加直接控制何时加载和释放内容,那么更好的地方可能是viewWillAppear:
和viewDidDisappear:
。
我的viewcontrollers的alloc / init方法通常很空或者甚至没有。