iPhone Dev - Creación de NSString
-
06-07-2019 - |
Pregunta
Estoy realmente confundido con NSStrings. Como cuando debería hacer
NSString *aString = @"Hello";
de debería ser:
NSString *aString = [[NSString alloc] initWithString:@"Hello"];
Pero entonces es diferente cuando asigna un valor a una propiedad NSString, ¿no es así? ¿Alguien puede aclarar esto por mí?
¡Gracias!
Solución
En general, debe hacer lo primero, pero en su mayoría son funcionalmente iguales. Puede tratar NSStrings constantes como los objetos de cadena NSString normales, por ejemplo:
[@"Hello" length]
devolverá 5. Puede asignarlos a propiedades, todo simplemente funciona. Lo único que puede notar es que con los NSStrings constantes no tiene que preocuparse por retener / liberar. Esto se debe a que en realidad se asignan a la sección de datos de solo lectura de las aplicaciones y no tienen memoria asignada. Retener y liberar llamadas en su contra todavía funciona, simplemente se convierten en noops.
Otros consejos
NSString *aString = @"Hello";
Creará una cadena autorrelegada
. Es decir, si no lo retiene
explícitamente, podría desaparecer después de que termine su método (y a veces eso está totalmente bien). Pero si desea conservarlo más allá de ese tiempo, deberá conservarlo.
Si crea una propiedad para esa cadena como esta
@property (retain) NSString *aString;
Y luego asigne así:
self.aString = @"Hello";
Luego ha retenido correctamente la cadena y se quedará.
Por otro lado, usando alloc, init
creará una cadena para usted con un recuento de retención de 1, y si no lo necesita más allá de ese método, debe liberar
it.
**** Editar: @ " Hola " no es una cadena autorrelegada, como han señalado otros. Mi error. ****