La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Cuándo usar copia y cuándo usar fuerte para los atributos NSString?

¿Cuándo usar copia y cuándo usar fuerte para los atributos NSString?

Generalmente se recomienda utilizar copia para NSString, de modo que cambiar los datos no afectará la asignación original

NSMutableString *mStr = [NSMutableStringstringWithFormat:@"abc"];

Si la dirección del objeto mStr es 0x11, es decir, 0x11 es la primera dirección de @"abc", la dirección de la variable mStr en la memoria es 0x123;

Cuando mStr se asigna a rStr retenido, rStr La dirección del objeto es 0x11 y la dirección de la variable rStr en la memoria es 0x124. rStr y mStr apuntan a la misma dirección y apuntan al mismo objeto @"abc; ". La dirección de este objeto es 0x11, por lo que sus valores son los mismos. de.

Cuando mStr se asigna a cStr de copia, la dirección del objeto cStr es 0x22 y la dirección de la variable cStr en la memoria es 0x125, las direcciones apuntadas por cStr y mStr son diferentes. y apuntan a un objeto diferente, por lo que la copia es una copia profunda, un objeto nuevo, la dirección de este objeto es 0x22 y el valor es @"abc".

Si cambia el valor de mStr ahora:

[mStr appendString:@"de"];

NSLog(@"retainStr:%@", _rStr) ;

NSLog(@"copyStr:%@", _cStr);

Resultado,

Utilice el valor de la cadena retenida rStr: @"abcde " ,

El valor de la cadena copiada cStr es:@"abc",

Entonces, en circunstancias normales, no queremos que el valor de la cadena cambie con mStr, Por eso generalmente usamos copiar para establecer las propiedades de la cadena.

Si desea que el valor de la cadena cambie con el valor de la cadena asignada, puede usar strong y retener.

Espero que esto ayude.