【问题标题】:Does setting a property on a property call the first property's setter? [duplicate]在属性上设置属性会调用第一个属性的设置器吗? [复制]
【发布时间】:2013-02-28 15:49:05
【问题描述】:

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

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

而InnerClass本身有一个属性:

@property NSString *text;

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

【问题讨论】:

  • @AndrewMadsen 不重复
  • @JustinMeiners 捍卫你的立场。我看到你的答案和那个链接骗局中的另一个答案在内容上看起来非常相似。
  • @CodaFi 链接中的问题与我的第一个答案(编辑前的下方部分)相同,它基本上询问属性是否确实设置和获取。这个问题是询问当成员属性更改时是否会通知具有成员的对象。在不同的上下文中,关于相同功能的不同问题。

标签: objective-c accessor declared-property


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    抱歉,我误解了您最初问题的上下文。

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

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

    但它会在someObject 上调用-obj。

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

    编辑前:

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

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

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

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

    【讨论】:

    • 是的,我正在使用生成的设置器(自定义)。我想知道设置内部对象属性是否会激活外部对象的 setObj: 方法,因为它的属性已被修改。我知道我并没有很好地解释自己。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多