vahşi kullanım sıklığını göz değişen, Bahsettiğiniz durumların her biri için uygun bir yer yoktur. Kendine basmamaya dikkat etmelisin. Örnekle, şahsen rastladığım örnekleri göstereceğim.
Subclassing kasıtlı Joe sözü gibi, size bir mülk geçersiz önce daha iyi yaptığınızı tam olarak ne olduğunu ve başka seçenekleri olmadığı vardı, bu durumda bir özellik
geçersiz kılmak için. Şahsen, mülkiyeti yeniden beyan etmek ve sentezlemek yerine, özelleştirme elde etmek için zaten var olan bir mülk için tek bir belirleyiciyi veya alıcıyı geçersiz kılmanın genellikle yeterli olduğunu buldum. Örneğin, yalnızca UIClearColor arka planına sahip olmak için mantıklı olan özel bir UIView alt sınıfını düşünün. Bunu uygulamak için, bir uyarı iletisi yazdırmak ve daha sonra üst aracın uygulamasını çağırmamak için -setBackgroundColor:
'u geçersiz kılabilirsiniz. Bir mülkün tamamen geçersiz kılınması için bir nedenim olmadığımı söyleyeceğim, ancak mevcut bir mülkü tamamen ele geçirmeniz gereken bazı durumlarda kullanışlı bir araç olmadığını söyleyemeyeceğim.
Özel Mülkiyet
Bu için kredi vermek daha faydalıdır. Özel bir mülke alternatif, hepimizin aşina olduğu düz bir 'ivar'dır.
[_myIvar release], _myIvar = nil;
ya: bu belirli bir sıklıkta değişiyor bir ivar ise, aşağıdaki görüldüğü gibi kod parçalarıyla bitireceğiz çok kötü görünmüyor ise
[_myIvar release];
_myIvar = [someValue retain];
, Bu gibi bellek yönetimi boilerplate kodu gerçekten eski, gerçekten hızlı olur. Alternatif olarak, yukarıdaki örneği özel bir varlık olarak, anlambilimini koruyabiliriz. bir süre sonra gözleri ve parmaklar çok daha kolaydır
self.myIvar = someValue;
: Bu, sadece gereken şey olursa olsun, anlamına gelmektedir. Buna dikkat etmekte haklısınız, çünkü bu özellik evrenin geri kalanı için görünmez olduğundan, bir alt sınıf tarafından yanlışlıkla geçersiz kılınabilir. Bu, Objective-C'de geliştirirken doğal bir risktir, ancak riski ufukta küçültmek için önlemler alabilirsiniz. Bu önlemler, özel mülkünüzün ismini tahmin edilebilir bir şekilde değiştirmeye yönelik varyasyonlardır. Burada alabileceğin sonsuz yollar var: Örneğin, özel mülk isimlerini baş harfleri ve alt çizgi ile başlatacak kişisel bir politika yapıyorsun. Benim için mw_ivar
ve ilgili -setMW_ivar:
ve -mw_ivar
erişim sağlayıcıları gibi bir şey alırdım. Evet, birisinin gelebileceği ve yanlışlıkla bu ismi geçersiz kılabileceği istatistiksel olarak mümkün, ama gerçekten yapmayacaklar. Özellikle de uygulamalarınızı kodunuzu kullanabilecek kişilere yayınlamanın bir yolu varsa. Ve Apple'ın etrafta dolanmadığını ve bu şekilde karışan özel mülkler yaptığını rahatlıkla söyleyebilirim, o yüzden bu cephede de güvende olacaksınız.
Halka Readonly,
Özel olarak okuma yazma Bu sadece standart bir uygulamadır. Haklısın, çünkü mülkiyetin içinde olduğu için tehlikeli değil. Yanlışlıkla geçersiz kılan herkesin sadece kendileri sorumludur.
Aksi halde kaçırdığınız başka bir kullanım notu, bir alt sınıfta daha spesifik bir tür belirtmek içindir. YaniEbeveyninizde "id" tipi var. Alt sınıfta, bunu daha ayrıntılı olarak (NSString * 'gibi) özelliği yeniden sınıflandırarak ve alt öğede saklamayı kullanmak için derleyiciyi bilgilendirmek üzere alt sınıftaki' @ dynamic attribName 'öğesini kullanarak yapabilirsiniz. –