This question already has answers here:
Synthesized property and variable with underscore prefix: what does this mean? [duplicate]

(3个答案)


7年前关闭。




我已经在iOS上玩了几个月了,总是使用@synthesize来“设置和获取” @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有关,但是我仍然不太清楚。

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

非常感谢。

最佳答案

使用时
@synthesize param2 = _param2;
表示您使用其他名称直接访问实例变量。

(在新的XCode版本中,如果您未自行指定合成,则XCode会为您编写一个,与之相同)

如果您使用:

_param2

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

如果您使用:
self.param2

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

根据经验,您想直接在init方法中访问ivar,而在类的其余部分中使用self。

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

Encapsulating data in Objective-C

关于ios - Objective-C中参数中的前缀“_”是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18915102/

10-09 23:28