Seguramente, poner 'copia' en una declaración de propiedad se opone al uso de un entorno orientado a objetos donde los objetos en el montón se pasan por referencia: uno de los beneficios que obtiene aquí es que, al cambiar un objeto, todas las referencias a ese objeto ver los últimos cambios. Muchos idiomas proporcionan 'ref' o palabras clave similares para permitir que los tipos de valor (es decir, estructuras en la pila) se beneficien del mismo comportamiento. Personalmente, usaría la copia con moderación, y si considerara que el valor de una propiedad debe protegerse de los cambios realizados en el objeto desde el que fue asignado, podría llamar al método de copia de ese objeto durante la asignación, por ejemplo:
p.name = [someName copy];
Por supuesto, al diseñar el objeto que contiene esa propiedad, solo usted sabrá si el diseño se beneficia de un patrón donde las tareas toman copias: Cocoawithlove.com tiene lo siguiente que decir:
"Debe usar un descriptor de acceso de copia cuando el parámetro setter puede ser mutable pero no puede cambiar el estado interno de una propiedad sin previo aviso ", por lo que la decisión de si puede soportar el valor de cambiar inesperadamente es suya. Imagina este escenario:
//person object has details of an individual you're assigning to a contact list.
Contact *contact = [[[Contact alloc] init] autorelease];
contact.name = person.name;
//person changes name
[[person name] setString:@"new name"];
//now both person.name and contact.name are in sync.
En este caso, sin usar la copia, nuestro objeto de contacto toma el nuevo valor automáticamente; si lo usáramos, sin embargo, tendríamos que asegurarnos manualmente de que los cambios fueron detectados y sincronizados. En este caso, retener la semántica puede ser deseable; en otro, la copia podría ser más apropiada.
name
debe publicardealloc
o no?