我来这里是为了寻求帮助,因为我正准备完成我的iphone项目,我希望它是完美的!
我对UIViewcontroller
的分配和 deallocation 存在一些问题。
让我解释一下:
我有UITableview
个自定义单元格。在每个自定义单元格中,一个按钮将分配一个新的UIViewController
: ListOfAGuestFriendViewController ;
所以,我创建了一个调用方法来进行“翻转过渡”的委托,并显示我的新ListOfAGuestFriendViewController视图。
我的问题是,我的addSubiew
的全部遇到了同样的问题, ListOfAGuestFriendViewController 永远不会得到取消分配,或者在视图加载后取消分配!
有人可以解释我如何制作完美的 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
永远不会解除分配。
我没有使用属性进行此实例化,但是当我这样做时,它是一样的!
答案 0 :(得分:1)
让我用你的代码解释一下:
ListOfAGuestFriendViewController *listOfAGuestFriendViewController = [[ListOfAGuestFriendViewController alloc]init];
创建对象时,保留计数将为1。
执行此操作时:[self.tableviewContainerView addSubview:listOfAGuestFriendViewController.view];
接收方视图将保留视图。
然后它的零售额将变为2。
之后:[self.view removeFromSuperview]; 保留计数将变为1。
每个对象只有在零件数量变为0后才会被释放。 在上面的例子中它是1,所以它永远不会调用dealloc方法。
如果您在此[listOfAGuestFriendViewController release];
之后写下此行:[self.tableviewContainerView addSubview:listOfAGuestFriendViewController.view];
这意味着它的保留计数从2减少到1,因此当您调用[self.view removeFromSuperview];
时,您的视图将被取消分配。
addSubview的参考
参考Memory Management
答案 1 :(得分:0)
你检查了dealloc功能吗? // Tu as as fonction dealloc dans tes ViewController quiestapopléeautomatiquementquand ta vueestretirée。
- (void)dealloc
{
[yourThings release], yourThings = nil;
[super dealloc];
}