2012-01-11 132 views
4

我刚刚从一本我拾起的书(大书呆子牧场)中学习OOP,它只是通过了getter和setter章节。我只想澄清我明白我刚刚做了什么。除了创建方法来设置实例的值,还有另一种方法来提取值并显示它,我创建了使用@property@synthesize语法来定义这两种方法。Getter和Setter解释?

-(void) setHeightOfObject:(int)h; 
-(void) setWeightOfObject:(float)w; 
-(int) heightOfObject; 
-(float) weightOfObject; 

,并定义它像这样:

而不是做这个的

@property int heightOfObject; 
@property float weightOfObject; 

- (int)heightOfObject 
{ 
    return heightOfObject; 
} 

- (void)setHeightOfObject:(int)h 
{ 
    heightInMeters = h; 
} 

- (float)weightOfObject 
{ 
    return weightOfObject; 
} 

- (void)setWeightOfObject:(float)w 
{ 
    weightOfObject = w; 
} 

我会getter和setter方法在.h文件中做到这一点然后转到我的.m文件并链接它:

@synthesize heightInMeters, weightOfObject; 

然后,这使我能够设置我的对象的值,然后得到它,如果我需要它打印?我知道这是一个重要的概念,我想确保我有适当的把握。

回答

3

你是对的。必要的扩展到您在编译时编写的实现。

由于编写getter和setter是无聊和重复的(并且大多数对象都有一些属性,所以你需要获取getters和setters)有这个小小的快捷方式使得你花更少的时间在boilerplate code上,并且有更多的时间执行一些有趣的事情。

如果您想了解有关objective-c属性的更多详细信息,可以查看programming guide(尽管此时可能对您有些不必要地详述)。

+0

太棒了,我将在稍后的编程之旅中检查链接 – David 2012-01-11 22:42:55

0

你不仅得到getter和setter。你也可以得到一个整洁的语法:self.heightOfObject,你可以指定或读取它。 @property有很多设置,所以你可能想要详细阅读。尤其是,您可以控制是否需要读取和写入权限,或者只需要其中一项权限。

1

您通过使用@property和@synthesize有两个部分。

@property告诉编译器它应该允许你使用点语法来调用heightOfObject和weightOfObject的访问器。这样算下来,

int height = myObject.heightOfObject; 
myObject.weightOfObject = 10; 

成为法人代码是完全等价的:

int height = [myObject heightOfObject]; 
[myObject setWeightOfObject:10]; 

你可以使用@property没有@synthesize,在这种情况下,你必须完全实现存取,你在做了你的问题。

使用@synthesize会告诉编译器它应该为您生成访问器,如果您的运行时支持(例如,在iOS和64位OS X上),它也会自己生成实例变量。

+0

谢谢,那正是我想知道的。 – David 2012-01-11 22:42:42