55

Cuando no se está compilando con ARC, se recomienda utilizar las propiedades copy para tipos de datos como NSString. No pude encontrar la documentación adecuada sobre el uso de copy en modo ARC. ¿Puede alguien decirme qué es aplicable para ARC?¿Debe una propiedad NSString bajo ARC ser fuerte o copiar?

+0

¿Qué estás tratando de hacer? Muestre una pieza de código de ejemplo donde desee conocer el método adecuado para seguir. – Dustin

Respuesta

72

Todavía se recomienda copiar porque desea evitar que algo pase una cadena mutable y luego cambiarla sin que usted lo sepa. Una copia garantiza que la cadena que tiene no cambiará.

+9

Tenga en cuenta que cuando digo "garantizar" me refiero al código que se ajusta a las mejores prácticas de Objective-C. No puedo dar cuenta de un programador deshonesto que cree que es inteligente agregar el método 'copy' a una categoría' NSString', por ejemplo. – Joe

+0

explicación increíble hombre ... !! –

+0

¿qué tal 'NSMutableArray' debería usar copia para él. –

10

No importa si está usando ARC o no-ARC.

El razonamiento detrás de copy es para que pueda garantizar que el estado interno de su clase no se puede modificar desde fuera de la implementación.

Esto podría suceder si alguien le pasa un NSMutableString, y luego lo modifica más adelante. Esa consideración es independiente del entorno de gestión de memoria.

13

Copiar y ARC son ortogonales: realiza copias de objetos mutables para "congelar" su estado; ARC realiza un seguimiento del recuento de referencias del objeto.

NSString objetos pueden o no ser mutables. Cuando recibe un NSString* como parámetro, no puede estar seguro de que sea inmutable a menos que verifique su tipo (e incluso entonces puede obtener falsos positivos). Si su algoritmo se basa en que la cadena no cambia después de haberse establecido, hacer una copia es lo correcto. ARC, por otro lado, se asegurará de que el objeto no se libere mientras está haciendo una fuerte referencia a él.

Cuestiones relacionadas