在属性上设置属性是否会调用第一个属性的setter?

时间:2013-03-12 21:54:35

标签: objective-c accessor declared-property

如果某个类具有属性的自定义setter:

@interface OuterClass : NSObject
@property InnerClass *obj;
-(void)setObj:(InnerClass *)obj;

InnerClass本身有一个属性:

@property NSString *text;

然后我执行:obj.text = @"Hello";会激活OuterClass对象的setObj:方法吗?

2 个答案:

答案 0 :(得分:4)

不,因为您没有设置属性,所以不会调用setObj:。您获取属性,然后设置结果的属性之一。这相当于[[something obj] setText:@"Hello"]

答案 1 :(得分:3)

抱歉,我误解了你原来问题的背景。

调用someObject.obj.text = @"Hello"不会在外部类上调用-setObj

@properties会生成简单的setter和getter,并且不会观察对ivars成员所做的更改。

然而,它会在-obj上致电someObject

这样想。给定someObject.obj.text =someObject.obj部分使用someObject的getter返回obj。然后,obj.text =部分会将-setText发送到obj获取者的结果。

编辑前:

是的,@ property会自动为ivar生成一个setter和getter。

设置obj.text = @"hello"会调用-setText:方法。

并访问媒体资源x = obj.text会调用-text方法。

确保覆盖该方法与该属性完全匹配的setter或getter。