การวาง 'คัดลอก' ลงในประกาศคุณสมบัติจะต้องเผชิญกับการใช้สภาพแวดล้อมเชิงวัตถุซึ่งวัตถุบนฮีปจะถูกส่งผ่านโดยการอ้างอิง - ประโยชน์อย่างหนึ่งที่คุณได้รับจากที่นี่คือเมื่อเปลี่ยนวัตถุการอ้างอิงทั้งหมดไปยังวัตถุนั้น ดูการเปลี่ยนแปลงล่าสุด มีภาษาจำนวนมากที่ให้ 'อ้างอิง' หรือคำหลักที่คล้ายกันเพื่อให้ประเภทค่า (เช่นโครงสร้างในสแต็ก) ได้รับประโยชน์จากพฤติกรรมเดียวกัน โดยส่วนตัวฉันจะใช้การทำสำเนาเท่าที่ควรและถ้าฉันรู้สึกว่าค่าคุณสมบัติควรได้รับการปกป้องจากการเปลี่ยนแปลงที่เกิดขึ้นกับวัตถุที่ได้รับมอบหมายฉันสามารถเรียกวิธีการคัดลอกของวัตถุนั้นในระหว่างการมอบหมายเช่น:
p.name = [someName copy];
แน่นอนเมื่อออกแบบวัตถุที่มีคุณสมบัตินั้นมีเพียงคุณเท่านั้นที่จะรู้ว่าการออกแบบได้ประโยชน์จากรูปแบบที่ได้รับมอบหมายถ่ายสำเนาหรือไม่ - Cocoawithlove.comมีดังต่อไปนี้ว่า
"คุณควรใช้ copy accessor เมื่อพารามิเตอร์ 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
หรือไม่?