如果一个类有一个属性的自定义设置器:
@interface OuterClass : NSObject
@property InnerClass *obj;
-(void)setObj:(InnerClass *)obj;
并且InnerClass
本身有一个属性:
@property NSString *text;
然后我会这样做:obj.text = @"Hello";
这会激活OuterClass
对象的setObj:
方法吗?
如果一个类有一个属性的自定义设置器:
@interface OuterClass : NSObject
@property InnerClass *obj;
-(void)setObj:(InnerClass *)obj;
并且InnerClass
本身有一个属性:
@property NSString *text;
然后我会这样做:obj.text = @"Hello";
这会激活OuterClass
对象的setObj:
方法吗?
不,setObj:
不会被调用,因为您没有设置属性。您正在获取该属性,然后设置结果的属性之一。这相当于[[something obj] setText:@"Hello"]
.
抱歉,我误解了您原始问题的上下文。
调用someObject.obj.text = @"Hello"
不会调用-setObj
外部类。
@properties 生成简单的 setter 和 getter,并且不观察对 ivars 成员所做的更改。
但是它会调用-obj
.someObject
像这样想。给定someObject.obj.text =
,该someObject.obj
部分使用 gettersomeObject
来返回obj
。然后该obj.text =
部分发送-setText
到obj
getter 的结果。
编辑前:
是的,@property 会自动为 ivar 生成 setter 和 getter。
设置obj.text = @"hello"
调用-setText
: 方法。
并访问该属性x = obj.text
调用该-text
方法。
确保您是否覆盖了方法与属性完全匹配的 setter 或 getter。