【发布时间】:2012-07-23 02:31:25
【问题描述】:
我来这里寻求帮助,因为我正在完成我的 iphone 项目,我希望它是完美的!
我对@987654321@ 的allocation 和deallocation 有一些问题。
让我解释一下:
我有一个带有自定义单元格的UITableview。在每个自定义单元格中,一个按钮将分配一个新的UIViewController:ListOfAGuestFriendViewController;
所以,我创建了一个委托,它调用一个方法来进行“翻转过渡”,并显示我的新 ListOfAGuestFriendViewController 视图。
我的问题是,我的addSubiew 的所有 都遇到了同样的问题,ListOfAGuestFriendViewController 永远不会得到 deallocated,或者在视图加载后被释放!
谁能准确地解释我如何才能制作出一个完美 addSubview ?
这是我的代码:
当我翻转视图时:
-(void)flipAView
{
Guest *currentSelectedGuest = [self createAGuestUsingIndexPath:self.selectedIndex];
ListOfAGuestFriendViewController *listOfAGuestFriendViewController = [[ListOfAGuestFriendViewController alloc]init];
[listOfAGuestFriendViewController setCurrentGuestSelected:currentSelectedGuest];
[listOfAGuestFriendViewController setMyListOfContactControllerDelegate:self];
[UIView animateWithDuration:0.25 animations:^{
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:self.tableviewContainerView cache:YES];
[self.tableviewContainerView addSubview:listOfAGuestFriendViewController.view];
}completion:^(BOOL finished){
[listOfAGuestFriendViewController release];
[self collapseCurrentExpandedCell];
}];
}
当我想回去时:
-(IBAction)goBackButtonGotPressed:(id)sender{
[UIView animateWithDuration:0.5 animations:^{
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
forView:[self.view superview] cache:YES];
[self.view removeFromSuperview];
}];
}
如果我删除那行代码:
[listOfAGuestFriendViewController release];
我的listOfAGuestFriendViewController 永远不会解除分配。
我不为此实例使用属性,但是当我这样做时,它是一样的!
【问题讨论】:
-
显然你的应用不是基于 ARC 的。为什么不将其转换为 ARC。许多(如果不是全部)这些内存管理问题都会消失。当你想释放或释放某些属性或 ivar 时,只需将其设置为 nil。
-
我现在不太喜欢 ARC...在 ARC 中转换我的所有项目会花费太多时间...我还有另一个项目要处理:(
-
我认为你的问题是当你添加这一行时 [listOfAGuestFriendViewController release]; dealloc 有效,如果这一行 [listOfAGuestFriendViewController release];删除然后 dealloc 永远不会工作,是吗?
-
如果我删除那行代码:[listOfAGuestFriendViewController release];永远不会调用 dealloc 方法,但如果我不调用,则会在 viewDidLoad 之后调用 dealloc 方法
-
@MidhunMP 当我点击我的 goBackButton 时,在我的 listOfAGuestFriendViewController 中调用 -(IBAction)goBackButtonGotPressed:(id)sender{} 方法!该方法必须翻转 listOfAGuestFriendViewController.view 并释放我的 listOfAGuestFriendViewController
标签: iphone memory-management uiviewcontroller dealloc