Das Kopieren einer Eigenschaftsdeklaration mit "Kopieren" steht im Widerspruch zur Verwendung einer objektorientierten Umgebung, in der Objekte auf dem Heap als Referenz übergeben werden. Einer der Vorteile, die Sie hier erhalten, besteht darin, dass beim Ändern eines Objekts alle Verweise auf dieses Objekt vorhanden sind siehe die neuesten Änderungen. Viele Sprachen bieten 'ref' oder ähnliche Schlüsselwörter an, damit Werttypen (dh Strukturen auf dem Stapel) vom gleichen Verhalten profitieren können. Persönlich würde ich das Kopieren sparsam verwenden, und wenn ich der Meinung wäre, dass ein Eigenschaftswert vor Änderungen an dem Objekt geschützt werden sollte, von dem er zugewiesen wurde, könnte ich die Kopiermethode dieses Objekts während der Zuweisung aufrufen, z.
p.name = [someName copy];
Wenn Sie das Objekt entwerfen, das diese Eigenschaft enthält, wissen natürlich nur Sie, ob das Design von einem Muster profitiert, bei dem Zuweisungen kopiert werden - Cocoawithlove.com hat Folgendes zu sagen:
"Sie sollten einen Kopier-Accessor verwenden, wenn der Setter-Parameter möglicherweise veränderbar ist, der interne Status einer Eigenschaft jedoch nicht ohne Vorwarnung geändert werden kann." Die Entscheidung, ob Sie den Wert für eine unerwartete Änderung aushalten können, liegt also ganz bei Ihnen. Stellen Sie sich dieses Szenario vor:
//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.
In diesem Fall nimmt unser Kontaktobjekt ohne Verwendung der Kopie automatisch den neuen Wert an. Wenn wir es jedoch verwenden würden, müssten wir manuell sicherstellen, dass Änderungen erkannt und synchronisiert werden. In diesem Fall kann es wünschenswert sein, die Semantik beizubehalten. In einem anderen Fall ist eine Kopie möglicherweise besser geeignet.
name
in veröffentlicht werdendealloc
oder nicht?