Gli oggetti NSString devono essere allocati e init?
-
10-07-2019 - |
Domanda
Domanda Noob:
Al momento ho l'impressione che quando vuoi creare un oggetto, devi allocare
e init
quell'oggetto.
Tuttavia, ho visto diversi codici di esempio in cui viene dichiarato un oggetto NSString
, ma non vedo alcun messaggio alloc
o init
che segue ...
Un esempio molto semplice:
NSString *myString = @"Hello World"; NSLog(@"%@" , myString);
Qualcuno può spiegare perché è così?
Soluzione
Dichiarazione una variabile non richiede il rilascio di memoria.
Gli oggetti?? Istantanea fanno. E puoi creare un'istanza di un nuovo oggetto solo se chiami alloc o copia
Nel tuo esempio, stai impostando il tuo riferimento all'oggetto già esistente che il compilatore crea dalla stringa codificata. E non è necessario gestirne la memoria perché non è stata creata un'istanza.
Non so se lo sto spiegando abbastanza chiaramente.
Modifica
Sembra che ci sia già una domanda che risponde a questa:
È un NSString letterale rilasciato automaticamente o deve essere rilasciato?
Altri suggerimenti
Quando si inserisce un NSString
letterale nel codice, come @ " hello, world '
, il compilatore alloca spazio per esso nel file eseguibile e viene caricato in memoria e inizializzato all'avvio del programma.
Poiché fa parte del tuo eseguibile, vive per l'intera durata della tua app. Non è necessario conservarlo o rilasciarlo. La variabile NSString * myString
che crei è un puntatore al punto in memoria in cui il compilatore ha letteralmente NSString
.