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

Iphone 正确释放视图时应用程序崩溃,iphone,view,crash,release,alloc,Iphone,View,Crash,Release,Alloc,希望你能帮我解决这个问题。 我对以下代码有问题: -(IBAction)swapViews:(id)sender{ myappAppDelegate *delegate = (myappAppDelegate *) [[UIApplication sharedApplication] delegate]; ThirdViewController *thirdView = [[ThirdViewController alloc] initWithNibName:@"ThirdVie

希望你能帮我解决这个问题。 我对以下代码有问题:

-(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,然后将其释放。问题是,当我将视图更改为第三个视图控制器,然后想返回到前一个视图时,应用程序崩溃。 这就是我回到以前观点的方式:

-(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];
}
释放视图时再次出现相同的问题。 如果我不发布视图,应用程序不会崩溃,但是内存泄漏很多,考虑到我有超过15个ViewController,如果我长时间使用它,应用程序最终会崩溃

知道我做错了什么吗? 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];

}

不要听起来像“显而易见的先生”,但除非在释放其控制器之前切换到的视图保留在代理中,否则在切换回之前,您是在释放的视图上操作的,因此会发生崩溃

如果您的
switchView:toView
方法在
UIViewController
s上操作,而不仅仅是
UIView
s,可能会更好。然后,您可以保留所需视图的viewController,并在不再需要时释放它


但现在我们只能从您当前的问题描述中了解到这些。显示
switchView:toView:
switchView 2:toView:
方法的代码,以及崩溃日志,我们将从那里开始。

显示
switchView:toView:
方法的代码。请为每个代码行使用4个空格。HTML代码标记不受支持(很好)。;-)[myappAppDelegate switchView]做什么?和[…切换视图2:]?感谢您的回答!myappAppDelegate switchView:toView具有以下代码,用于创建过渡效果。switchView2有相同的代码,只是没有使用TransitionUrlUp->TransitionUrlDown
-(void)switchView:(UIView*)视图1到视图:(UIView*)视图2{[UIView beginAnimations:@“Animation”上下文:nil];[UIView setAnimationDuration:0.75];[UIViewsetAnimationTransition:UIViewAnimationTransitionUrlUp for视图:self.window缓存:是];[view1 removeFromSuperview];[window addSubview:view2];[UIView commitAnimations];}
是,您可以保留视图(通过addSubview:)但不是控制器本身!谢谢你指出这一点。我对这一点相当陌生。因此,我应该保留UIViewController,而不仅仅是UIView?如果是,最好的方法是什么?你的appDelegate中应该已经有一个UIViewController成员,所以将switchView:toView方法更改为switchViewController:toViewController。在执行此操作之前过渡保留新控制器,将其设置为成员,释放当前控制器,您应该会没事的。谢谢大家。这正是我遇到的问题。因此,在切换到那里,在那里保留并在其他地方发布后,我的应用程序现在工作得很好。我现在可以释放所有分配的视图,而不会使其崩溃,当然也不会使cou崩溃rse零内存泄漏。我是新来的,我应该如何接受答案?