2009-10-06 5 views
11

Ou, quel est le contraire de + (void) initialiser?Objectif C - Où gérez-vous les variables statiques globales?

Voici ma situation:

J'ai une unité de classe, dont - (id) initWithName: fonction prend des données d'un NSDictionary global, qui est créé paresseusement, défini dans le fichier Unit.m comme:

static NSMutableDictionary * unitLibrary = nil; Où dois-je appeler [release unitLibrary]?

Répondre

13

Vous pouvez l'appeler à un emplacement dans lequel vous savez que le dictionnaire n'est plus nécessaire. Si cela est nécessaire tout au long du cycle de vie de l'application, vous n'avez rien à faire car toutes les mémoires seront récupérées par le système d'exploitation à la fin de l'application.

+0

Ceci est sur l'iPhone, donc il ne peut y avoir aucune fuite de mémoire. Lorsque l'utilisateur clique sur le bouton d'accueil et quitte l'application, mon tas entier est désalloué? – abtree

+1

Oui, quand ils frappent à la maison tout votre espace d'adresse est éliminé, y compris votre tas. –

+2

Pas besoin de faire un nettoyage de printemps juste avant de démolir la maison. Mettre fin à l'application est assez rapide, et plus rapide. – PeyloW

3

Il n'y a pas de réponse générale. Vous devriez le libérer quand vous êtes sûr qu'il ne sera plus jamais utilisé. Les candidats possibles peuvent figurer dans le message de délégué applicationWillTerminate, ou via une fonction atexit().

+0

Il ne sert à rien de libérer des objets lorsque l'application se termine - la mémoire est sur le point d'être libérée de toute façon. – Chuck

+0

Oui, c'est mauvais - laissez simplement le système d'exploitation le nettoyer. Il n'y a aucun intérêt à faire du travail ici. Vous retardez simplement l'abandon de l'application. – Ken

+1

Il est sans doute utile de réduire la quantité de fouillis produite par les outils de détection des fuites. Mais cela ne vaut probablement pas la peine. –