我对Objective-C中的属性有一个非常基本的问题。
如果我Obj.MyProp
@synthesize
,我只能通过点表示法(myProp
)访问对象的属性。这是对的吗?
如果我使用自己的setter方法,我将不再能用点表示法引用属性吗?
基本上我正在寻找C#类型的功能,我可以编写自己的自定义getter / setter,但还提供了在设置属性时需要执行的其他代码。
答案 0 :(得分:6)
@property创建自动消息声明,就像写
一样(int)thing;
(void)setThing:(int)value;
@synthesize自动创建实现,即
(int)thing {
return thing;
}
(void)setThing:(int)value {
thing = value;
}
如果您自己定义,它会覆盖@synthesized版本。因此,只要您正确命名方法,它就可以使用,无论是否有@synthesize。
点符号适用于合成或自定义方法实现。
答案 1 :(得分:3)
这不正确。即使您编写自定义的getter或setter,您仍然可以使用点表示法,当然您的getter和setter会为该属性维护正确的方法命名。
答案 2 :(得分:0)
来自docs:
@synthesize
使用@synthesize关键字告诉编译器应该这样做 合成二传手和/或吸气剂 如果你不这样做,财产的方法 在@implementation中提供它们 块。
只有在你还没有编写它们时它才会合成。如果你写过它们,它们就不会被合成。