Sayı 1 , derleyici ve bağlayıcı tarafından görülen kod miktarını en aza indirmek ve ayrıca potansiyel olarak döngüsel referanslardan kaçınmak için MyOtherObject sınıfını ileri bildirerek diğer ikisinden farklıdır. Bu şekilde yaparsanız, #import'u .m dosyasına koymayı unutmayın.
Bir @property bildirerek (ve .m içinde @synthesize ile eşleşerek), belirttiğiniz şekilde işlenen bellek semantiğiyle otomatik olarak erişimci yöntemleri oluşturursunuz. Çoğu nesnenin genel kuralı Saklama'dır, ancak NSStrings, örneğin Kopyayı kullanmalıdır. Oysa Singletons ve Delegeler genellikle Assign kullanmalıdır. El yazısı erişimcileri sıkıcı ve hataya meyillidir, bu nedenle bu, birçok yazım ve aptalca hatadan tasarruf sağlar.
Ayrıca, sentezlenmiş bir özelliği bildirmek, aşağıdaki gibi nokta gösterimini kullanarak bir erişimci yöntemini çağırmanıza izin verir:
self.otherObj = someOtherNewObject;
MyOtherObject *thingee = self.otherObj;
Normal, mesaj iletme yolu yerine:
[self setOtherObject:someOtherNewObject];
MyOtherObject *thingee = [self otherObj];
Perde arkasında gerçekten şöyle görünen bir yöntemi çağırıyorsunuz:
- (void) setOtherObj:(MyOtherObject *)anOtherObject {
if (otherObject == anOtherObject) {
return;
}
MyOtherObject *oldOtherObject = otherObject;
otherObject = [anOtherObject retain];
[oldOtherObject release];
}
…veya bu
- (MyOtherObject *) otherObject {
return otherObject;
}
Tamamen popodaki ağrı, doğru. Şimdi bunu sınıftaki her ivar için yapın. Tam olarak doğru yapmazsanız, bir hafıza sızıntısı yaşarsınız. Derleyicinin işi yapmasına izin vermek en iyisidir.
1 Numaranın bir ivarı olmadığını görüyorum . Bunun bir yazım hatası olmadığını varsayarsak, sorun değil çünkü @property / @synthesize yönergeleri sizin için sahne arkasında da bir ivar bildirecektir. Bunun Mac OS X - Snow Leopard ve iOS4 için yeni olduğuna inanıyorum.
Numara 3'ün oluşturulmuş erişimcileri yok, bu yüzden onları kendiniz yazmanız gerekiyor. Eğer erişimci yöntemlerinizin yan etkilere sahip olmasını istiyorsanız, yukarıda gösterildiği gibi standart hafıza yönetimi dansınızı yapın, ardından ihtiyacınız olan yan işi, erişimci yönteminin içinde yapın. Eğer bir mülk sentezlemek ise sıra kendi yazarken , daha sonra da sürüm önceliğe sahiptir.
Her şeyi kapattım mı?