¿Se ha publicado automáticamente un NSString literal o necesita ser lanzado?
-
11-07-2019 - |
Pregunta
Al crear una cadena con la siguiente notación:
NSString *foo = @"Bar";
¿Es necesario liberar foo
? ¿O es foo
publicado automáticamente en este caso?
Solución
Las cadenas asignadas al compilador (del formato @ " STRING ") son constantes, por lo que se ignoran los mensajes de retención, liberación y liberación. No tiene que liberar o liberar automáticamente en este caso (pero no le hará daño).
Otros consejos
Como se menciona en los documentos
Usted toma posesión de un objeto si crearlo usando un método cuyo nombre comienza con "alloc" o "new" o contiene "copia" (por ejemplo, alloc, newObject o mutableCopy), o si envíele un mensaje de retención. Usted está responsable de renunciar propiedad de los objetos que posee lanzamiento o autorelease. En otro momento recibes un objeto, no debes libérelo.
Dado que no está utilizando alloc, copy, etc., no necesita preocuparse por liberar el objeto.
Estoy de acuerdo con @Ben \ Gottlieb en que las cadenas asignadas al compilador (del formato @ " STRING ") son constantes " pero como no los ha inicializado al pasar un mensaje alloc
o retención
, no debe pasar release
o autorelease
mensaje a ellos de lo contrario su aplicación se bloqueará con el siguiente registro
" el puntero liberado no fue asignado "
NSString *str = [NSString string];
es equivalente a:
NSString *str = [[[NSString alloc] init] autorelease];
así que release
o autorelease
no deben pasarse aquí también.