0

如果一个类有一个属性的自定义设置器:

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

并且InnerClass本身有一个属性:

@property NSString *text;

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

4

2 回答 2

4

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

于 2013-03-12T22:03:26.987 回答
3

抱歉,我误解了您原始问题的上下文。

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

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

但是它会调用-obj.someObject

像这样想。给定someObject.obj.text =,该someObject.obj部分使用 gettersomeObject来返回obj。然后该obj.text =部分发送-setTextobjgetter 的结果。

编辑前:

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

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

并访问该属性x = obj.text调用该-text方法。

确保您是否覆盖了方法与属性完全匹配的 setter 或 getter。

于 2013-03-12T21:55:27.137 回答