将Viewcontroller添加到Navigation控制器会增加保留计数吗?

时间:2011-12-03 11:42:15

标签: ios uiviewcontroller uinavigationcontroller

请不要关闭此问题或将其视为重复。

我希望你帮助确认我的理解。

这适用于添加到导航控制器的VIew控制器。 这个RayNewbie中的一个人thread提到如果我们保留View Controller的实例,它们的保留计数将变为+2,当我们弹出它时,保留计数减少1.所以dealloc永远不会被召唤。

他的论点是否正确?

如果它是正确的,它们在以下情况下是否成立:

现在我在AppDelegate类中有两个VC作为iVar:

@property (retain, nonatomic) UserDetailsViewController *userdetailsVC;
@property (retain, nonatomic) PayDetailsViewController *paydetailsVC;

userdetailsVC = [[UserDetailsViewController alloc] initWithNibName:kuserDetailsVC bundle:nil];

paydetailsVC = [[PayDetailsViewController alloc] initWithNibName:kpayDetailsVC bundle:nil];

我在.m文件中合成了iVars。

根据用户的操作,我将上述VC中的任何一个设置为窗口的根视图控制器。

-(void)method1{

 self.window.rootViewController = userdetailsVC;

}

-(void)method2{

 self.window.rootViewController = paydetailsVC;

}

我在设置根视图控制器的方式上做错了吗?

1 个答案:

答案 0 :(得分:2)

是的,将视图控制器添加到导航控制器会添加保留计数。导航控制器维护一组视图控制器。在那里添加视图控制器时,它会添加到此数组中。这个数组是pushViewController和popViewController调用中使用的数组。

那说,你的分配方式,不推荐的方式。 这更合适:

UserDetailsViewController* u = [[UserDetailsViewController alloc] initWithNibName:kuserDetailsVC bundle:nil];
self.userdetailsVC = u;
[u release];
PayDetailsViewController *p = [[PayDetailsViewController alloc] initWithNibName:kpayDetailsVC bundle:nil];
self.paydetailsVC = p;
[p release];

UserDetailsViewController* u = [[UserDetailsViewController alloc] initWithNibName:kuserDetailsVC bundle:nil]; self.userdetailsVC = u; [u release]; PayDetailsViewController *p = [[PayDetailsViewController alloc] initWithNibName:kpayDetailsVC bundle:nil]; self.paydetailsVC = p; [p release];

希望它有所帮助。