差(目标c 2.0)

问题描述:

哪些以下目标c 2.0代码段之间的差异(如果有的话):差(目标c 2.0)

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

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

@implementation MyClass 
@synthesize myString; 
@end 

ivar(第一个)是一个普通变量,不能在创建的接口的实现范围之外访问(如果使用@private指令)并且没有合成访问器方法。

的性质(第二个)是一种包裹的ivar和东西,可以总是通过实例化一个类访问,并具有合成存取方法(如果正在使用@synthesize指令)

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

在第二种情况下,我不要认为myString的综合getter/setter可以在实现范围之外访问。注意它们是在实现文件中的类扩展中。 – SundayMonday 2011-12-22 17:45:06

+0

对不起,我错过了那部分。后者被认为是在私人部分(与Apple的私有API相同,如UIView的-recirsiveDescription)。但它们仍然可以通过访问器方法访问,尽管编译器会生成警告。第一个将不可访问,因为编译器会产生错误。 – Eugene 2011-12-22 18:32:51