2009-03-12 10 views
8

Noob pregunta:¿Los objetos NSString deben ser alloc e init?

estoy actualmente en la impresión de que cuando se quiere crear un objeto, es necesario alloc y init ese objeto.

Sin embargo, he visto visto varios códigos de muestra, donde se declara un objeto NSString, sin embargo, no veo mensajes alloc o init siguiente ...

Un ejemplo muy sencillo:

NSString *myString = @"Hello World"; 

NSLog(@"%@" , myString); 

¿Alguien puede explicar por qué esto es así?

Respuesta

12

Declarando una variable no requiere liberar memoria.

Creación de instancias objects does does. Y sólo una instancia de un nuevo objeto si se llama alloc o copiar

En su ejemplo, está estableciendo su referencia al objeto ya existente de que el compilador crea de la cadena codificada. Y no tiene que administrar su memoria porque no la creó.

No sé si lo estoy explicando con suficiente claridad.

EDIT:

Parece que ya hay una pregunta que responde a esta:

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

+0

Gracias Sergio ... ahora entiendo. – ChrisR

+1

¿El constructo '@" ... "' está declarado en un archivo de cabecera de Foundation, Core Foundation o el compilador los maneja? –

6

Cuando incrusta un literal NSString en su código, como @"hello, world', los asigna compilador espacio en el archivo ejecutable y se carga en la memoria y se inicializa cuando se inicia el programa.

Dado que es parte de su ejecutable, vive durante toda la vida útil de su aplicación. No es necesario retenerlo o liberarlo. La variable NSString *myString que usted crea es un puntero al lugar en la memoria donde el compilador puso el literal NSString.

Cuestiones relacionadas