¿Los objetos NSString necesitan ser alloc e init?
-
10-07-2019 - |
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í?
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
.