请不要关闭此问题或将其视为重复。
我希望你帮助确认我的理解。
这适用于添加到导航控制器的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;
}
我在设置根视图控制器的方式上做错了吗?
答案 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];
希望它有所帮助。