如果某个类具有属性的自定义setter:
@interface OuterClass : NSObject
@property InnerClass *obj;
-(void)setObj:(InnerClass *)obj;
和InnerClass
本身有一个属性:
@property NSString *text;
然后我执行:obj.text = @"Hello";
会激活OuterClass
对象的setObj:
方法吗?
答案 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。