Kuşkusuz bir özellik bildirimi üzerine 'kopya' koymak, öbek üzerindeki nesnelerin referans olarak iletildiği nesne yönelimli bir ortam kullanma karşısında uçar - burada elde ettiğiniz avantajlardan biri, bir nesneyi değiştirirken, o nesneye yapılan tüm referanslardır. son değişiklikleri görün. Birçok dil, değer türlerinin (örn. Yığındaki yapılar) aynı davranıştan yararlanmasına izin vermek için 'ref' veya benzer anahtar kelimeler sağlar. Şahsen, kopyayı idareli olarak kullanırdım ve bir özellik değerinin atandığı nesnede yapılan değişikliklere karşı korunması gerektiğini hissettiysem, atama sırasında bu nesnenin kopyalama yöntemini çağırabilirim, örneğin:
p.name = [someName copy];
Tabii ki, bu özelliği içeren nesneyi tasarlarken, tasarımın atamaların kopya aldığı bir desenden faydalanıp faydalanmadığını yalnızca siz anlayacaksınız - Cocoawithlove.com şunları söyleyecektir:
"Setter parametresi değiştirilebilirken bir uyarının dahili durumunun uyarı yapmadan değiştirilememesi durumunda bir kopya erişimcisi kullanmalısınız " - böylece beklenmedik bir şekilde değişecek değere dayanıp dayanamayacağınıza dair karar tamamen size aittir. Bu senaryoyu düşünün:
//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.
Bu durumda, kopya kullanmadan, iletişim nesnemiz yeni değeri otomatik olarak alır; eğer bunu kullanırsak, değişikliklerin tespit edildiğinden ve senkronize edildiğinden emin olmak zorundayız. Bu durumda, semantiği korumak arzu edilebilir; bir başkasında, kopya daha uygun olabilir.
name
Serbest bırakılmalı mı bırakılmamalıdealloc
mı?