¿@ @ “Some text” da un autorreleasado o retiene 1 objeto?

Dado este código:

// Initialize string NSString *name = @"Franzi"; 

@ “” macro crea un NSString con el texto dado (aquí el nombre Franzi) y un RETENIDO DE CUENTA DE 1?

¿Entonces @ “” da un NSString con el que tiene que ser liberado o no? ¿Soy responsable de este objeto? El segundo ejemplo de código me confunde, aunque lo estoy usando de esa manera:

 NSSting *message; message = [NSString stringWithFormat:@"Hello @%!",name]; //message = [NSString stringWithFormat:@"Hello Girl!"]; 

Entonces, el mensaje se lanza en el siguiente ciclo de ejecución, k. ¿Pero qué es con el NSString dado como argumento para stringWithFormat?

¿La clase se opone a que NSString libere el NSString @ “Hello% @” / @ “Hello Girl” como argumento? ¿O lo hace @ “” – Konstruktor solo devuelve NSStrings autorellegados?

La notación literal NSString @"" le proporciona cadenas constantes en tiempo de comstackción que residen en su propio espacio de memoria y tienen direcciones constantes.

Al contrario de lo que se cree, la razón por la que no se lanzan cadenas literales no se debe a que formen parte del grupo de autorrelease. No lo son; en cambio, pasan toda la vida útil de la aplicación en el mismo espacio de memoria que están asignados en tiempo de comstackción y nunca se desasignan en el tiempo de ejecución. Solo se eliminan cuando el proceso de la aplicación muere.

Dicho esto, la única vez que necesita administrar la memoria de forma constante NSString es cuando los conserva o los copia por usted mismo. En ese caso, debe liberar sus punteros retenidos o copiados, tal como lo hace con cualquier otro objeto.

Otra cosa: son los propios literales que no necesitan administración de memoria. Pero si los pasa como argumentos a los métodos de conveniencia o inicializadores de stringWithFormat: , como lo hace con stringWithFormat: entonces son los objetos devueltos por los métodos e inicializadores que siguen normalmente todas las reglas de administración de memoria.