Tentunya menempatkan 'copy' pada deklarasi properti terbang di muka menggunakan lingkungan berorientasi objek di mana objek pada heap dilewatkan dengan referensi - salah satu manfaat yang Anda dapatkan di sini adalah bahwa, ketika mengubah suatu objek, semua referensi ke objek itu lihat perubahan terbaru. Banyak bahasa yang menyediakan kata kunci 'ref' atau sejenis untuk memungkinkan tipe nilai (yaitu struktur di stack) mendapat manfaat dari perilaku yang sama. Secara pribadi, saya akan menggunakan salinan hemat, dan jika saya merasa bahwa nilai properti harus dilindungi dari perubahan yang dilakukan pada objek tempat ia ditugaskan, saya bisa memanggil metode salin objek itu selama penugasan, misalnya:
p.name = [someName copy];
Tentu saja, ketika mendesain objek yang berisi properti itu, hanya Anda yang akan tahu apakah desain mendapat manfaat dari pola tempat penugasan mengambil salinan - Cocoawithlove.com memiliki yang berikut ini untuk mengatakan:
"Anda harus menggunakan copy accessor ketika parameter setter mungkin bisa berubah tetapi Anda tidak bisa mengubah status internal suatu properti tanpa peringatan " - jadi penilaian apakah Anda dapat mempertahankan nilai untuk berubah secara tak terduga adalah milik Anda sendiri. Bayangkan skenario ini:
//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.
Dalam hal ini, tanpa menggunakan salinan, objek kontak kami mengambil nilai baru secara otomatis; jika kami menggunakannya, kami harus memastikan secara manual bahwa perubahan terdeteksi dan disinkronkan. Dalam hal ini, mempertahankan semantik mungkin diinginkan; di tempat lain, salinan mungkin lebih sesuai.
name
dirilisdealloc
atau tidak?