3

我已经在 iOS 上玩了几个月了,总是使用 @synthesize 来“制作 setter 和 getter”的 @property。但是在一些教程中,我经常看到@synthesize param = _param,我不太明白它的意思。

For example: in .h file

@property (nonatomic, retain) NSString *param1;
@property (nonatomic, retain) NSString *param2;

in .m file

@synthesize param1; //this is what I like to do
@synthesize param2 = _param2; // this is what 'experienced' programmer does

根据我的习惯,我可以使用 self.param1,或者只是 param1 来获取这个实例,顺便问一下有什么区别吗?

从其他人看来,他们似乎喜欢使用 _param2 而不是其他方法。我知道它与 getter/setter 有关,但我仍然不太清楚。

有人可以解释他们的区别和优缺点吗?

非常感谢。

4

2 回答 2

8

当你使用

@synthesize param2 = _param2;

意味着您使用不同的名称直接访问实例变量。

(在新的 XCode 版本中,如果您不指定自己的合成,XCode 会为您编写一个,与那个相同)

如果您使用:

_param2

您正在直接访问实例变量。

如果您使用:

self.param2

您正在通过 setter/getter 访问变量,并且这些 setter/getter 是使用您设置的属性定义的。

根据经验,您希望直接在 init 方法中访问您的 ivar,并在您使用 self.

如果您想获得更多信息,请点击以下链接:

在 Objective-C 中封装数据

于 2013-09-20T11:03:19.477 回答
2

@synthesize param2 = _param2;为基础实例变量使用另一个名称。优点是您不会轻易错误地访问 ivar。

这些天你会自动合成,它使用第二个变体,所以只需将@synthsize所有内容放在一起并使用self.paramand _param

于 2013-09-20T11:03:44.947 回答