Getter和Setter解释?

时间:2012-01-11 17:53:01

标签: objective-c xcode

我只是从我读过的一本书(Big Nerd Ranch)学习OOP,它刚刚经历了吸气剂和制定者章节。我想澄清一点,我明白我刚刚做了什么。我创建了使用@property@synthesize语法来定义两种方法,而不是创建一个设置实例值的方法,然后另一种方法来提取值并显示它。

而不是这样做:

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

并像这样定义:

- (int)heightOfObject
{
    return heightOfObject;
}

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

- (float)weightOfObject
{
    return weightOfObject;
}

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

我会在.h文件中使用getter和setter来执行此操作:

@property int heightOfObject;
@property float weightOfObject;

然后转到我的.m文件并链接它:

@synthesize heightInMeters, weightOfObject;

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

4 个答案:

答案 0 :(得分:3)

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

由于编写getter和setter是无聊且重复的(并且大多数对象都有一堆属性,你需要getter和setter),这个小小的快捷方式使你在boilerplate code上花费的时间更少,而且实现更多的时间有趣。

如果您想了解有关objective-c属性的更多详细信息,可以查看programming guide(尽管此时可能会对您进行详细介绍)。

答案 1 :(得分:1)

使用@property和@synthesize实现了两个部分。

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

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

成为合法代码,与此完全相同:

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

您可以在不使用@synthesize的情况下使用@property,在这种情况下,您必须完全按照问题中的方式实现访问者。

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

答案 2 :(得分:0)

在Objective C 2.0中引入了属性和综合,以便提供一种直接创建getter和setter的方法。

检查此链接会有所帮助:

http://cocoacast.com/?q=node/103

答案 3 :(得分:0)

你不仅得到了吸气剂和二传手。您还可以获得一个简洁的语法:self.heightOfObject,您可以分配或读取它。 @property有很多设置,所以你可能想详细阅读。特别是,您可以控制是否需要读取和写入访问权限,或者只需要其中一个。