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,我不太了解它的含义。
根据我的习惯,我可以使用self.param1,也可以仅使用param1来获取此实例,请问有什么区别吗?
从其他人看来,他们似乎要使用_param2而不是其他方法。
我知道这与getter / setter有关,但是我仍然不太清楚。
有人可以解释他们的区别和优点/缺点吗?
非常感谢。
您正在直接访问实例变量。
如果您使用:
您正在通过setter / getter访问变量,并且使用您设置的属性定义了这些setter / getter。
根据经验,您想直接在init方法中访问ivar,而在类的其余部分中使用self。
如果您想获取更多信息,请点击以下链接:
Encapsulating data in Objective-C
(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