2011-12-22 16 views
5

aşağıdaki Amaç-c 2.0 kod pasajlarının arasındaki farklar (varsa) nelerdir:Fark (Objective-C 2.0)

// in MyClass.h 
@interface MyClass 
@private 
    NSString *myString; 
@end 

ve

// in MyClass.m 
@interface MyClass() 
@property (nonatomic, copy) NSString *myString; 
@end 

@implementation MyClass 
@synthesize myString; 
@end 

cevap

6

İvar (birincisi), oluşturulduğu arabirimin bir uygulamasının kapsamından erişilemeyen düz bir değişkendir (eğer @özel yönergesi kullanılıyorsa) ve sentezlenmiş erişimci yöntemleri yoktur.

özelliği (ikincisi) her zaman bir sınıf örneğini üzerinden erişilebilir ve sentezlenmiş bir erişim yöntemine, ikinci muhafaza I'de (@synthesize yönergesi kullanılıyorsa)

MyClass *class = [[MyClass alloc] init]; 
[class setMyString:@"someString"]; //generated setter 
NSString *classString = [class myString]; //generated getter 
+0

sahip olabilir sarılmış bir ivar ve bir şey olduğu myString'in sentezlenmiş alıcı/belirleyicisine uygulama kapsamı dışında erişilebileceğini düşünmeyin. Uygulama dosyasının içinde bir sınıf uzantısı içinde olduklarına dikkat edin. – SundayMonday

+0

Üzgünüm, o bölümü özledim. Sonuncusu özel bir bölümde (Apple'ın özel API'sinin UIView'in -recirsiveDescription ile aynı) olduğu kabul edilir. Ancak derleyici, uyarıcı yöntemleri kullanarak erişebilir, ancak derleyici uyarı üretecektir. Derleyici, hata üreteceğinden ilk olarak erişilebilir olmayacaktır. – Eugene