2010-06-23 8 views
1

Je travaille sur l'animation de petites sous-vues à travers mon interface utilisateur en utilisant une transition de flip. Pour que la transition Flip fonctionne correctement, je crée un UIView temporaire pour fournir le contexte, exécuter la transition, puis nettoyer ensuite. Mais j'ai du mal à trouver comment libérer l'objet sans écraser l'application. Voici le bloc de code:Comment puis-je éviter une fuite avec cette séquence d'animation basée sur des blocs?

UIView *tempContainer = [UIView alloc]; 
tempContainer = [self.view viewWithTag:700]; 

[UIView transitionWithView:tempContainer 
     duration:2 
     options:UIViewAnimationOptionTransitionFlipFromRight 
     animations:^{ 
        [[[tempContainer subviews] objectAtIndex:0] removeFromSuperview]; 
        [tempContainer addSubview:newImageView]; 
        [newImageView release]; 
        } 
      completion:^(BOOL finished){ 
        [tempContainer release]; //Crashes app 
        }]; 

J'utilise des techniques d'animation en mode bloc pour iOS4. Le problème est que mon tempContainer fuit définitivement, mais si je le libère ou le relance automatiquement dans le bloc d'achèvement, mon application se bloque, et je le fais après le message [UIView transition ...], il plante. Quelle est la meilleure façon de refactoriser ceci afin que je ne perde pas ma mémoire? (J'ai 30 de ces petites choses à faire.)

Répondre

1

il fuit, car une fois que vous avez +alloc -El

UIView *tempContainer = [UIView alloc]; 

vous substituez immédiatement.

tempContainer = [self.view viewWithTag:700]; 

Il se bloque lorsque vous -release parce que vous ne possédez pas la vue dominante ([self.view viewWithTag:700]).

+0

aha, gotcah. Je l'ai changé en UIView * tempController = [self.view viewWithTag: 700]; et maintenant je ne vois aucune fuite, et pas besoin de libérer tempController car c'est juste un pointeur vers une autre vue appartenant à quelque chose d'autre. Merci! – Jeof