AD

¿Ya dominas lo básico? Un curso estructurado de Objective-C es la vía rápida para dar el salto.

Ver cursos de Objective-C en Udemy

Enlace de afiliado. No te cuesta nada extra.

🍎Lecciones de Objective-C
Lección 40 / 68

Copia superficial y copia profunda

En esta lección verás por qué asignar un objeto no siempre lo copia.

Al asignar un diccionario a otra variable, ambas apuntan al mismo objeto: modificar uno cambia el otro.

El código de ejemplo lo demuestra cambiando la ciudad a través de la segunda variable.

En Objective-C todos los objetos se manejan por puntero, así que esto es la norma y no la excepción. Para tener una copia independiente hay que pedirla: mutableCopy crea un objeto nuevo, y copy crea una versión inmutable.

La palabra clave es que ambas son copias superficiales: el contenedor es nuevo, pero los objetos de dentro se comparten. Con un diccionario de diccionarios, modificar uno interior se ve desde ambas copias. Para copiar en profundidad existe initWithDictionary:copyItems:YES, que copia un nivel más, o el rodeo de serializar y volver a leer.

De ahí viene una convención muy útil de Objective-C: las propiedades de tipo NSString se declaran copy y no strong. Si alguien te pasa un NSMutableString y luego lo modifica, tu propiedad cambiaría a tus espaldas; con copy, guardas una versión fija.

📖 Código de referencia
✍️ Tu código
Escribe tu código y pulsa «Ejecutar»

🧪 Este sitio no puede compilar ni ejecutar Objective-C directamente, así que comprueba al instante si lo que escribiste coincide con el código de referencia (la corrección ocurre por completo en tu navegador; no se envía nada a ningún servidor).

🔗 El mismo tema en otros lenguajes

Mira cómo se escribe lo mismo en otro lenguaje.

Espacio publicitario (banner)
Espacio publicitario (en el artículo)