2010-07-23 8 views
8

J'ai hérité d'une application iPhone au travail et je suis nouveau sur Objective-C, donc je n'ai pas encore mes repères. J'ai rencontré le code semblable à ceci:Est-ce que -dealloc doit faire autre chose que libérer de la mémoire?

- (void) dealloc { 
    [[StaticObject sharedObject] showSomeDialog]; 

    [super dealloc]; 
} 

Je sais que ceci est mal vu dans d'autres langues. Mon sens d'araignée devient fou en regardant ce code.

Est-ce un langage Objective-C commun? Ou est-ce que j'ai une base de code de merde à réparer?

Répondre

7

Vous ne devriez pas mettre le code de l'interface utilisateur dans un -dealloc. Règle générale, n'utilisez que -dealloc pour nettoyer ce que vous avez fait: libérer des objets, supprimer des observateurs, etc.

Considérez ce qui se passerait si cet objet vivait sur un thread autre que le thread principal ... maintenant vous auriez le code de l'interface utilisateur en cours d'exécution sur le thread non principal, qui est une mauvaise chose .

+4

Version courte: "Oui, vous pouvez avoir une base de code à corriger." ;-) –

+1

Bon à voir mon intuition est confirmée. – ageektrapped

0

Vous pouvez faire une telle chose pour des raisons de débogage. Mais je ne pense pas que tu devrais faire quelque chose comme ça! Cela signifie qu'une boîte de dialogue est invitée lorsqu'un objet est en cours de désallocation. Donc, si vous avez besoin d'un mécanisme pour afficher une boîte de dialogue à un moment donné, ne le faites pas dépendre d'un objet en cours de désallocation. Dans la méthode dealloc, vous devriez vraiment libérer tous les objets conservés par l'objet désalloué. Et ne pas faire certaines fonctionnalités de l'application de fantaisie.