Ios UINavigationController释放bonanza

Ios UINavigationController释放bonanza,ios,objective-c,memory-management,uinavigationcontroller,Ios,Objective C,Memory Management,Uinavigationcontroller,在本代码末尾: UIViewController *viewController = [[UIViewController alloc] init]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; [viewController release]; [self presentModalViewCon

在本代码末尾:

UIViewController *viewController = [[UIViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[viewController release];
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
导航控制器像往常一样以模式显示,但当我单击viewController上的按钮时,它会崩溃。事实上,viewController的保留计数为0。 如果我评论两个版本中的一个,一切都比预期的好。
我几乎在任何地方都能看到这段代码,有什么问题吗?

您发布的代码是正确的,但在其他地方您发布的代码太多了

需要注意的几点:

首先

第二,确保按照概述正确管理nib对象的内存


最后,您需要在仪器中使用NSZombie检测来找出真正的问题所在。提供了一个很好的操作方法。

对于重新计数,我确信我使用的是正确的。除了默认的MainWindow.xib之外,我没有使用任何nib。不确定NSZombie在这种情况下是否有帮助,但实际上我应该尝试一下。关键是你不能正确使用retainCount。返回的号码不可信。这是一个没有意义的数字。我知道,但如果应用程序处于空闲状态,一两秒钟后,它通常会给出一个有用的数字。我从来没有用过NSZombie和仪器,看起来更实用!从跟踪来看,“僵尸”似乎不是viewController,而是“自我”viewController,显然我对任何发布消息都不负责。你有一个僵尸是因为你调用了
release
某个你不该调用的地方,或者你缺少了一个
retain
,这是你需要的。我建议你看看苹果的内存管理编程指南。