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