2009-03-12 22 views
8

Noob domanda:Gli oggetti NSString devono essere alloc e init?

Sono attualmente sotto l'impressione che quando si desidera creare un oggetto, è necessario alloc e init quell'oggetto.

Tuttavia, ho visto diversi codici di esempio visto in cui viene dichiarato un oggetto NSString, eppure non vedo alloc o init seguenti messaggi ...

Un esempio molto semplice:

NSString *myString = @"Hello World"; 

NSLog(@"%@" , myString); 

Qualcuno può spiegare perché è così?

risposta

12

Dichiarare una variabile non richiede il rilascio di alcuna memoria.

L'istanziazione degli oggetti fa. E si crea un'istanza solamente un nuovo oggetto se si chiama alloc o copiare

Nel tuo esempio, si sta impostando il vostro riferimento all'oggetto già esistente che il compilatore crea dalla stringa hard-coded. E tu non devi gestire la sua memoria perché non l'hai istanziata.

Non so se lo sto spiegando abbastanza chiaramente.

EDIT:

Sembra che ci sia già una domanda che risponde a questa:

Is a literal NSString autoreleased or does it need to be released?

+0

Grazie Sergio ... ora capisco. – ChrisR

+1

Il costrutto '@" ... "' è dichiarato in un file di intestazione di Foundation, Core Foundation o il compilatore lo gestisce? –

6

Quando si incorpora un NSString letterale nel codice, come ad esempio @"hello, world', alloca compilatore spazio nel file eseguibile e viene caricato in memoria e inizializzato all'avvio del programma.

Poiché fa parte del tuo eseguibile, vive per l'intera vita della tua app. Non è necessario trattenerlo o rilasciarlo. La variabile NSString *myString che crei è un puntatore al posto in memoria in cui il compilatore inserisce il valore letterale NSString.

Problemi correlati