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零内存泄漏。我是新来的,我应该如何接受答案?