如果一个类有一个属性的自定义设置器:
@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到objgetter 的结果。
编辑前:
是的,@property 会自动为 ivar 生成 setter 和 getter。
设置obj.text = @"hello"调用-setText: 方法。
并访问该属性x = obj.text调用该-text方法。
确保您是否覆盖了方法与属性完全匹配的 setter 或 getter。