我已经玩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有关,但我还不太清楚。
有人可以解释他们的区别和利弊吗?
非常感谢。
答案 0 :(得分:7)
使用时
@synthesize param2 = _param2;
表示您使用其他名称直接访问实例变量。
(在新的XCode版本中,如果你没有自己指定合成,XCode会为你写一个,与那个相同)
如果您使用:
_param2
您正在直接访问实例变量。
如果您使用:
self.param2
您正在通过setter / getter访问变量,并使用您设置的属性定义那些setter / getter。
根据经验,您希望直接在init方法中访问ivar,并在您使用self的其他类中访问。
如果您想了解更多信息,请点击以下链接:
答案 1 :(得分:2)
@synthesize param2 = _param2;
为底层实例变量使用另一个名称。专家是你不容易错误地访问ivar。
这些天你自动合成,它使用第二种变体,所以只需将@synthsize
全部放在一起,然后使用self.param
和_param
。