2009-10-06 10 views
11

Oppure, qual è l'opposto di + (void) initialize?Obiettivo C - Dove affidi le variabili statiche globali?

Ecco la mia situazione:

ho un'unità di classe, cui - (id) initWithName: funzione prende i dati da un NSDictionary globale, che viene creato pigramente, definito nel file Unit.m come:

statico NSMutableDictionary * unitLibrary = nil;

Dove chiamo [unitLibrary release]?

risposta

13

Puoi chiamarlo in un posto in cui sai che il dizionario non è più necessario. Se è necessario durante l'intero ciclo di vita dell'applicazione, non è necessario eseguire alcuna operazione in quanto tutte le memorie verranno recuperate dal sistema operativo al termine dell'installazione.

+0

Questo è l'iphone, quindi non ci possono essere perdite di memoria. Quando l'utente preme il pulsante home ed esce dall'app, il mio intero heap viene deallocato? – abtree

+1

Sì, quando colpiscono a casa viene eliminato l'intero spazio degli indirizzi, incluso l'heap. –

+2

Non c'è bisogno di fare pulizie di primavera appena prima di demolire la casa. La chiusura dell'applicazione è sufficiente e più veloce. – PeyloW

3

Non c'è una risposta generica. Dovresti deallocarlo quando sei sicuro che non verrà più utilizzato. I possibili candidati potrebbero essere nel messaggio di posta elettronica dell'applicazione WillTerminate o tramite una funzione atexit().

+0

Non c'è alcun senso nel rilasciare oggetti quando l'applicazione termina - la memoria sta per essere liberata comunque. – Chuck

+0

Sì, non va bene, lascia che sia il sistema operativo a pulirlo. Non ha senso lavorare qui. Stai solo ritardando la chiusura dell'app. – Ken

+1

È discutibilmente utile, per ridurre la quantità di clutter prodotta dagli strumenti di rilevamento perdite. Ma probabilmente non ne vale la pena. –

Problemi correlati