让我在详细解释中解释
In appDidfinish()
{
preLoginNavController = [[PreLoginNavController alloc] initPreLoginNavController];
[window addSubview:[preLoginNavController view]];
}
然后在用户按下按钮时 preLoginViewController
然后我这样做去了view2
RootViewController *arootController= [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:arootController animated:YES];
如果我这样做 [arootController发布]; 那么我就不能来自视图2
现在在视图2中按下后退按钮 然后我正在做这个
[self.navigationController popToRootViewControllerAnimated:YES];
所以我无法发布 [arootController release] 当我回到视图应用程序退出时没有错误
我在Rootview之前需要一个prelogin视图,这就是为什么我现在应该这样做我应该怎么做..我的应用程序工作正常,但我想解决这个漏洞:(
HEY 当我在preLogin(第一个视图)中按下并在释放后单击视图2中的后退按钮时,我收到此消息 objc [408]:FREED(id):发送给释放对象的消息发布= 0x466a340
答案 0 :(得分:0)
我想是的,一旦弹出它就会泄漏arootController。
答案 1 :(得分:0)
[arootController autorelease];
或之后:
[self.navigationController pushViewController:arootController animated:YES];
你可以释放它。
一个好的做法是:谁增加保留计数,应该减少它。并且因为aRootController在该类中是init,所以应该在那里发布
编辑:
如果你想使用navigationController:
,这应该是正确的代码- (void)applicationDidFinishLaunching:(UIApplication *)application {
self.preLoginNavController = [[[PreLoginNavController alloc] init] autorelease];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.mainItemListViewController];
[window addSubview:[self.navigationController view]];
[window makeKeyAndVisible];
}
然后当你需要推动时:
[self.navigationController pushViewController:anotherViewController animated:YES];