2012-02-01 23 views
10

bazı kod bakıyordu:Ne zaman & neden @interface ClassName (Private) kullanıyorsunuz? - Objective-C

@interface ClassName (Private) 

- (float)methodOne:(NSDictionary *)argOne; 
- (void)methodTwo:(NSDictionary *)argTwo; 

@end 

@implementation ClassName 
.... 

Yukarıdaki kod özel olarak sınıf için ek arayüz yöntemlerini tanımlamak için görünen ClassName.m dosyasının en üstünde?

Neden böyle? amaç ne? Başka nereye gidebilir (Özel)? Bunun üzerinde herkes var mı?

Teşekkür

cevap

16

Bu sınıf diğerlerine maruz kalmasını dahili olarak kullandığı yöntemleri tutmanın bir yoludur. Kapsüllenmenin bir parçası.

@interface ClassName() 

- (void)privateMethod; 

@end 

A sınıfı uzatma gerçekten bir kategoride sadece özel bir durumdur: Objective-C 2.0 (iOS ve Mac OS X 10.5+), bu uygulama dosyasının en üstünde bir sınıf uzantısı kullanmak daha yaygın (sorduğunuz şey budur). Birincil fark, bir kategori için derleyicinin, kategorideki beyan edilen yöntemler için tanımları içermemesi durumunda bile şikayet etmeyeceğidir. Sınıf uzantısındaki yöntemler için, sınıfınız bu yöntemleri ana @ uygulama bloğunda uygulamalıdır veya bir derleyici uyarısı alırsınız.

iOS kodunda veya Mac OS X 10.5 Leopard'ı hedefleyen bir Mac kodunda bir sınıf uzantısı kullanmanız daha iyi.

+0

Temelde, '(Özel) SinifAdi @interface' '@interface ClassName()' şeklinde amorti edilir. Doğru mu? – WebOrCode

+1

@WebOrCode, resmi olarak kullanımdan kaldırılmamış olsa da, basitçe bir kongre ve daha yaygın bir ObjC özelliğinin (kategoriler) kullanılması anlamına gelebilir. '(Özel)' seçeneğini kullanmak, kullanımdan kaldırılmayan bir * ad * kategorisi beyan ettiğiniz anlamına gelir. Yalnızca, sınıf uzantıları tarafından yerine getirilen "özel" mülkleri bildirmenin bir yolu olarak kullanımı. –

2

Temel olarak bu bir kategoridir ve .m dosyasına yöntem eklemeye izin verir. Bu günlerde en iyi yol bir Sınıf Eklenti kullanmaktır, sözdizimi sadece "Private" kelimesi eksiktir, sadece iki parantez vardır.

Bir sınıf uzantısının ek avantajı, özelliklerin de eklenebilir olması ve derleyicinin bildirilen tüm yöntemlerin tanımlandığını doğrulamasıdır.

Gerçekten kullanışlı olan tek bir alan .h dosyasında düzgün bir şekilde readingly bildirme ve yazma .m dosyasındaki okuma yeteneğidir. Bu şekilde, sınıftaki kullanıcıların sadece okuma erişimi vardır, ancak sınıfın kendisi tam erişime sahiptir.

İlgili konular