Objective-C 101:点符号和对象属性

时间:2009-10-08 17:29:25

标签: objective-c properties

我对Objective-C中的属性有一个非常基本的问题。

如果我Obj.MyProp @synthesize,我只能通过点表示法(myProp)访问对象的属性。这是对的吗?

如果我使用自己的setter方法,我将不再能用点表示法引用属性吗?

基本上我正在寻找C#类型的功能,我可以编写自己的自定义getter / setter,但还提供了在设置属性时需要执行的其他代码。

3 个答案:

答案 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中提供它们   块。

只有在你还没有编写它们时它才会合成。如果你写过它们,它们就不会被合成。