2010-09-11 10 views
1

Je crée un écran de chargement UIView qui est ajouté à une sous-vue pendant que du XML est analysé à partir de certaines URL. Une fois le XML renvoyé, l'écran de chargement est supprimé de sa vue d'ensemble.Quand publier un UIView retiré de la vue d'ensemble

La question que j'ai de Comment est-ce que je devrais libérer cet objet?

Dans le code ci-dessous, vous verrez que j'envoie removeFromSuperview à l'écran de chargement, mais j'ai toujours la propriété de cet objet sauf si je le libère. Mais, si je le libère, il n'y aura rien à publier dans viewdidUnload et dealloc.

- (void)loadView { 
    ... 
    loadingScreen = [[LoadingScreen alloc] initWithFrame: self.view.frame]; 
    [self.view addSubview:loadingScreen]; //retain count = 2 
} 

-(void)doneParsing { 
    ... 
    [loadingScreen removeFromSuperview]; //retain count = 1 
    [loadingScreen release]; //should i release the loading screen here? 
} 

- (void)viewDidUnload { 
    [loadingScreen release]; //if viewDidUnload is called AFTER doneParsing, this 
          //will cause an exception, but the app might crash before 
          //doneParsing is called, so i need something here 
} 

- (void)dealloc { 
    [loadingScreen release]; //if i've already released the object, i can't release here 
} 
+0

En fait, je pense que j'ai résolu ce problème en libérant le LoadScreen après qu'il a été ajouté en tant que sous-vue, puis en supprimant le chargement de l'écran de la superview dans doneParsing. Je ne libère pas le loadScreen dans viewDidUnload ou dealloc. – dianovich

+1

Ceci est correct. Donnez-le à l'aperçu, puis relâchez-le. Après cela, ce n'est plus votre responsabilité et vous pouvez l'oublier. L'aperçu le relâchera lorsque l'aperçu est libéré lui-même. –

Répondre

2

Lorsque vous relâchez loadScreen, réinitialisez-le à une valeur nulle.

[loadingScreen release]; 
loadingScreen = nil; 

[aucune version] n'aura lieu.