【问题标题】:Objective-C: message syntax vs. dot syntax; what's the difference?Objective-C:消息语法与点语法;有什么不同?
【发布时间】:2011-05-14 16:22:12
【问题描述】:

如果我使用的是@synthesize foo;,下面的有什么区别:

// message syntax
[myObj setFoo:5];
[myObj foo];

// dot syntax
myObj.foo = 5;
myObj.foo;

我喜欢点语法的一致性,但我不知道它是否在做我应该关心的事情。

任何其他信息都会有很大帮助。

【问题讨论】:

    标签: objective-c syntax syntactic-sugar


    【解决方案1】:

    使用点语法和使用消息语法在功能上没有区别。

    我发现使用消息语法与整个语言更加一致,并且实现点语法只是为了方便那些从使用它的语言(想到 Java)的程序员。

    我要问的是:无论你选择哪一个,都要保持一致。 不要混合和匹配单一的属性设置器! (多参数设置器显然是例外的)。

    【讨论】:

    • 同意。坚持一个或另一个。我更喜欢使用点语法,因为它告诉我我正在做的事情可能会保留或复制一个对象。
    • 我赞成!但我也(尝试)使用点表示法,这样当成员被定义为属性与方法时,我可以一目了然。
    • “不要混搭”有点毫无意义。如果您使用点表示法来设置所有属性,然后必须添加一个带有两个参数的 setter,您会怎么做?
    • @w.m 那你别无选择,只能混搭。这仅用于设置单个属性 - 这不适用于多个参数设置器。
    • 我认为点语法是一个很大的错误。它污染了语法并使人们感到困惑。
    【解决方案2】:

    它们是一样的。

    点语法用于表示对@property的访问,您也可以通过以下方式访问:

    [myObject setValue: [NSNumber numberWithIntValue:5] forKey:@"foo"];
    [myObject valueForKey:@"foo"];
    

    但本质上调用是相同的。

    【讨论】:

      猜你喜欢
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多