Objective-C中参数中前缀“_”的含义是什么?

时间:2013-09-20 10:58:42

标签: ios objective-c

我已经玩iOS几个月了,总是使用@synthesize来“制作@terperty的setter和getter”。但是在一些教程中,我经常看到@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有关,但我还不太清楚。

有人可以解释他们的区别和利弊吗?

非常感谢。

2 个答案:

答案 0 :(得分:7)

使用时

@synthesize param2 = _param2;

表示您使用其他名称直接访问实例变量。

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

如果您使用:

_param2

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

如果您使用:

self.param2

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

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

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

Encapsulating data in Objective-C

答案 1 :(得分:2)

@synthesize param2 = _param2;为底层实例变量使用另一个名称。专家是你不容易错误地访问ivar。

这些天你自动合成,它使用第二种变体,所以只需将@synthsize全部放在一起,然后使用self.param_param