我有一个由&组成的UINavigationController对象(名为) ,我的iPad 应用程序首先加载一个子类(名为LoginNavViewController1ViewController2UISplitViewControllermainSplitViewControllerLoginNavdidFinishLaunchingWithOptions
[self.mainSplitViewController presentModalViewController:LoginNav animated:YES];)。
显示ViewController1后,我UIButton在其中点击 a 以 push ViewController2,当我完成工作时,ViewController2我在其中点击 aUIButton以调用[self.navigationController dismissModalViewControllerAnimated:YES];以关闭LoginNav其两个视图控制器并显示mainSplitViewController's内容。
dealloc在两个ViewController1& ViewController2withNSLog语句中都有一个方法,一旦被loginNav解雇,NSLogs永远不会被解雇,但在两者都被解雇后做[self.navigationController.viewControllers objectAtIndex:0] release];& 。[self.navigationController.viewControllers objectAtIndex:1] release];[self.navigationController dismissModalViewControllerAnimated:YES];NSLogs
我把上面的两个release语句注释掉了,然后我启动了Allocationsinstrument,然后再次启动app,pushViewController2然后loginNav按上面描述的dismiss了,看一下Live Bytes(All Allocations value)列就6.9 MB在dismiss之后loginNav,然后我做了这一步再次,但在这种情况下,使用两个发布语句,我在列上得到了一个6.9 MB值。Live Bytes
两个问题:
1)为什么&的dealloc方法在持有它们的导航控制器被解雇后永远不会被解雇?并且执行上述两个发布声明来发布这些视图控制器是否正确?ViewController1ViewController2LoginNav
2)为什么释放ViewController1&ViewController2不释放内存?
ps 没有单个变量(或者在两个&IBOutlet)中都保存在内存中,所有内容都在它们两个中释放。ViewController1ViewController2