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?

¿Fue útil?

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

http://developer.apple.com/documentation/ Cacao / Conceptual / MemoryMgmt / Tasks / MemoryManagementRules.html

  

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 "

NOTA

NSString *str = [NSString string];

es equivalente a:

NSString *str = [[[NSString alloc] init] autorelease];

así que release o autorelease no deben pasarse aquí también.

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