2010-02-17 3 views

Répondre

2

Eh bien d'abord, vous voulez probablement libérer les choses viewDidDisappear: (après ils sont hors de l'écran), non viewWillDisappear: En tout état de cause, vous devriez probablement le libérer dans les deux viewDidDisappear: et dealloc ...

En viewDidDisappear: vous devrait libérer tout ce dont vous n'avez pas besoin pendant que vous êtes hors de l'écran afin d'économiser de la mémoire. Dans dealloc vous devriez libérer tout ce que votre objet aurait pu conserver. Vous voulez faire cela indépendamment du fait que vous l'avez potentiellement publié dans viewDidDisappear:, au cas où votre code est entré par un chemin étrange où viewDidDisappear: n'est pas appelé. Cela peut arriver dans le futur lorsque vous réutilisez le contrôleur de vue dans un contexte différent, ou lorsque Apple change quelque chose au sujet des contrôleurs de vue de collection dans lesquels vous logez votre VC.

Tant que vous êtes en train d'éliminer les ivars de manière appropriée Une fois que vous les avez libérés (ce qui devrait se produire automatiquement si vous utilisez des propriétés), le relâchement ne sera pas un problème car si vous le relâchez aux deux endroits, la seconde version finira par envoyer le message de libération à zéro.

+0

qu'en est-il de viewDidUnload? – willcodejavaforfood

+0

Certaines ressources sont appropriées pour être publiées ici, cela dépend vraiment de ce que vous faites. Le point clé est que, que vous libériez les objets en réponse à la pression de la mémoire ou à des événements pendant l'exécution du VC, vous devez vous assurer que tout objet que le VC a conservé est libéré dans dealloc. –

+0

Bonne réponse! Merci! –

Questions connexes