UIViewcontroller从未取消分配

时间:2012-07-24 17:52:42

标签: iphone memory-management uiviewcontroller dealloc

我来这里是为了寻求帮助,因为我正准备完成我的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永远不会解除分配。

我没有使用属性进行此实例化,但是当我这样做时,它是一样的!

2 个答案:

答案 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];
}