Безумовно, надягаючи "копію" на декларацію про властивості, лежить перед використанням об'єктно-орієнтованого середовища, коли об'єкти на купі передаються посиланням - одна з переваг, яку ви отримуєте тут, полягає в тому, що при зміні об'єкта всі посилання на цей об'єкт переглянути останні зміни. Багато мов надають «ref» або подібні ключові слова, щоб типи значень (тобто структури на стеку) отримували переваги від тієї ж поведінки. Особисто я скопіював копію, і якщо я відчув, що значення властивості слід захищати від змін, внесених до об'єкта, якому він був призначений, я міг би викликати метод копіювання цього об’єкта під час призначення, наприклад:
p.name = [someName copy];
Звичайно, розробляючи об'єкт, який містить цю властивість, ви тільки знатимете, чи дизайн виграє від шаблону, коли завдання отримують копії - Cocoawithlove.com має сказати наступне:
"Ви повинні використовувати аксесуар для копіювання, коли параметр setter може бути зміненим, але ви не можете змінити внутрішній стан властивості без попередження " - тому судження про те, чи можете ви витримати значення, щоб несподівано змінити, - все ваше власне. Уявіть собі такий сценарій:
//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.
У цьому випадку, не використовуючи копію, наш контактний об’єкт автоматично приймає нове значення; якщо ми все-таки використали його, нам доведеться вручну переконатися, що зміни були виявлені та синхронізовані. У цьому випадку збереження семантики може бути бажаним; в іншому, копія може бути більш доречною.
name
звільнятисьdealloc
чи ні?