Pregunta

Pregunta novata:

Actualmente tengo la impresión de que cuando desea crear un objeto, necesita asignar e init ese objeto.

Sin embargo, he visto varios códigos de muestra donde se declara un objeto NSString , pero no veo ningún mensaje alloc o init ...

Un ejemplo muy simple:

NSString *myString = @"Hello World";

NSLog(@"%@" , myString);

¿Alguien puede explicar por qué es así?

¿Fue útil?

Solución

Declarar una variable no requiere liberar ninguna memoria.

Instanciar objetos sí. Y solo crea una instancia de un nuevo objeto si llama a alloc o copy

En su ejemplo, está estableciendo su referencia al objeto ya existente que el compilador crea a partir 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 esto:

¿Es un NSString literal publicado automáticamente o necesita ser liberado?

Otros consejos

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

Dado que es parte de su ejecutable, dura toda la vida útil de su aplicación. No hay necesidad de retenerlo o liberarlo. La variable NSString * myString que crea para ella es un puntero al lugar en la memoria donde el compilador coloca el literal NSString .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top