这是导致iphone内存泄漏的原因

时间:2010-07-21 08:03:56

标签: iphone

让我在详细解释中解释

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

2 个答案:

答案 0 :(得分:0)

我想是的,一旦弹出它就会泄漏arootController。

答案 1 :(得分:0)

是的,会有泄漏。 2建议的解决方案是:

[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];