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!

¿Fue útil?

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. ****

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