Supongamos que estoy recibiendo una cadena C de alguna función:Gestión de memoria: de NSString stringWithCString: codificación:
char * mystring = SomeCFunction(...);
y soy propietario de esta cadena (soy responsable de liberar cuando he terminado)
Si, en Objective-C, creo una NSString *
usando:
NSString * mynsstring = [NSString stringWithCString:mystring
encoding:NSUTF8StringEncoding];
¿Todavía soy responsable de liberar la cadena original de C?
Supongo que la respuesta es sí, pero no puedo encontrar una respuesta definitiva en la documentación, y la funcionalidad del método opuesto (cStringUsingEncoding
), aunque sensible, me da pausa, porque maneja el cString liberando para ti.
Si la respuesta es sí, ¿entonces también soy responsable de asegurarme de no liberar la cadena c antes de terminar de usar el NSString *
, o la función copia la cadena por mí? Lo pregunto porque la documentación para stringWithCString
dice:
Devuelve una cadena que contiene los bytes en una matriz C dado, interpretado según una codificación determinada.
Lo que todavía me deja preguntándome si realmente copió los bytes, o si solo los señala internamente (y básicamente estoy haciendo un molde).
¡Ah! Eres increíble. ¡Gracias! Aceptaré la respuesta después de que hayan transcurrido los 6 minutos restantes en el temporizador de bloqueo de aceptación. – Steve
Esto debería estar en los documentos –
@ AndréFratelli Le sugiero que envíe un comentario (hay un enlace en la parte inferior de cada página de la documentación en línea) así que Apple agrega esto ;-) – AliSoftware