Certamente, colocar 'copiar' em uma declaração de propriedade não deve ser usado em um ambiente orientado a objetos, onde objetos na pilha são passados por referência - um dos benefícios que você obtém aqui é que, ao alterar um objeto, todas as referências a esse objeto veja as últimas alterações. Muitos idiomas fornecem 'ref' ou palavras-chave semelhantes para permitir que tipos de valor (ou seja, estruturas na pilha) se beneficiem do mesmo comportamento. Pessoalmente, eu usaria a cópia com moderação e, se considerasse que um valor de propriedade deveria ser protegido de alterações feitas no objeto do qual foi atribuído, poderia chamar o método de cópia desse objeto durante a atribuição, por exemplo:
p.name = [someName copy];
Obviamente, ao projetar o objeto que contém essa propriedade, apenas você saberá se o design se beneficia de um padrão em que as atribuições tiram cópias - Cocoawithlove.com tem o seguinte a dizer:
"Você deve usar um acessador de cópia quando o parâmetro setter puder ser mutável, mas não for possível alterar o estado interno de uma propriedade sem aviso " ", portanto, o julgamento sobre se você pode suportar o valor de alterar inesperadamente é seu. Imagine este cenário:
//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.
Nesse caso, sem usar a cópia, nosso objeto de contato recebe o novo valor automaticamente; se o utilizássemos, teríamos de garantir manualmente que as alterações fossem detectadas e sincronizadas. Nesse caso, reter semântica pode ser desejável; em outro, a cópia pode ser mais apropriada.
name
ser lançadodealloc
ou não?