正确释放视图时应用程序崩溃

时间:2011-06-24 14:21:22

标签: iphone view crash release alloc

希望你能帮我解决这个问题。 我遇到以下代码的问题:

-(IBAction)swapViews:(id)sender{
    myappAppDelegate *delegate = (myappAppDelegate *) [[UIApplication sharedApplication] delegate];
    ThirdViewController *thirdView = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
    [delegate switchView:self.view toView:thirdView.view];
    [thirdView release];
}

正如您所看到的,我已经分配了我的ViewController并在之后发布了它。问题是,当我将视图更改为我的ThirdViewController,然后想要返回到上一个视图时,应用程序崩溃了。 这就是我回到之前观点的方式:

-(IBAction)goBack:(id)sender{
    myappAppDelegate *delegate = (myappAppDelegate *) [[UIApplication sharedApplication] delegate];
    FirstViewController *firstView = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    [delegate switchView2:self.view toView:firstView.view];
    [firstView release];
}

释放View时再次出现同样的问题。 如果我不释放视图,应用程序不会崩溃但是有很多内存泄漏并且考虑到我有超过15个ViewControllers,如果我长时间使用它,应用程序最终会崩溃。

任何想法我做错了什么? ps:我正在使用委托来进行视图的动画/转换。

谢谢!

编辑:switchView:toView:下面的代码

-(void)switchView:(UIView *)view1 toView:(UIView *)view2 {
    [UIView beginAnimations:@"Animation" context:nil];
    [UIView setAnimationDuration:0.75];
    [UIViewsetAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.window cache:YES];
    [view1 removeFromSuperview];
    [window addSubview:view2];
    [UIView commitAnimations];

}

1 个答案:

答案 0 :(得分:1)

不想听起来像Obvious先生,但除非切换到的视图在其控制器释放之前保留在您的委托中,否则您在切换回之前在已发布的视图上操作,因此崩溃。

如果您的switchView:toView方法在UIViewController上运行,而不仅仅是UIView,那可能会更好。然后你可以保留你需要的viewController,并在不再需要时释放它。

但就目前而言,我们可以从您当前的问题描述中获取所有内容。显示switchView:toView:switchView2:toView:方法的代码,以及崩溃日志,我们将从那里开始。