0

iPhoneプロジェクトを完成させようとしていて、完璧にしたいので、助けを求めるためにここに来ました!

の割り当て割り当て解除に問題がありますUIViewcontroller

説明させてください:

UITableviewカスタムセルがあります。各カスタム セルには、新しいUIViewController: ListOfAGuestFriendViewControllerを割り当てるボタンがあります。

そこで、メソッドを呼び出して「反転トランジション」を行うデリゲートを作成し、新しい ListOfAGuestFriendViewController ビューを表示しました。

私の問題は、ListOfAGuestFriendViewControllerdeallocatedにならないか、ビューがロードされた直後に割り当てが解除されるという同じ問題をすべての.addSubiew

誰かが完璧な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割り当て解除はありません。

このインスタンス化ではプロパティを使用しませんが、使用しても同じです!

4

2 に答える 2

1

あなたのコードで説明しましょう:

ListOfAGuestFriendViewController *listOfAGuestFriendViewController = [[ListOfAGuestFriendViewController alloc]init];

オブジェクトを作成すると、保持カウントは 1 になります。

これを行う[self.tableviewContainerView addSubview:listOfAGuestFriendViewController.view];と、レシーバー ビューはビューを保持します。その後、retaincount は 2 になります。

この後: [self.view removeFromSuperview]; リテインカウントは1になります。

すべてのオブジェクトは、retaincount が 0 になった後にのみ解放されます 。上記の場合は 1 であるため、dealloc メソッドを呼び出すことはありません。

この行を書くと:[listOfAGuestFriendViewController release];この後[self.tableviewContainerView addSubview:listOfAGuestFriendViewController.view];つまり、保持カウントが 2 から 1 に減少するため[self.view removeFromSuperview];、ビューを呼び出すと割り当てが解除されます。addSubviewのリファレンスメモリ管理 のリファレンス

于 2012-07-24T18:30:52.800 に答える
0

dealloc 関数を確認しましたか? // Tu as une fonction dealloc dans tes ViewController qui est appelée automatiquement quand ta vue est retirée.

- (void)dealloc
{
    [yourThings release], yourThings = nil;
    [super dealloc];
}
于 2012-07-24T18:03:56.610 に答える