【问题标题】:Calling attributes in Objective-C在 Objective-C 中调用属性
【发布时间】:2014-12-12 20:36:17
【问题描述】:

我是 Objective-C 的新手。我之前学过其他一些程序语言,例如 C++、C#、Java。在这些语言中,调用属性或方法的语法是 object.attributes、object.methods,而在 Objective-C 中是 object.attributes、[object methods]。有时我可以在 Objective-C 中调用 [object attributes],但有时我不能。当我可以同时使用两者时,我想知道是否有任何区别,以及在这些情况下哪个更好。我们是否在 Java、C# 中不一样的情况下使用语法 []?

示例:我有一个 ObjectItem 数组。 ObjectItem 是一个类有一个BOOL 类型的属性是isLive。我想改变这个数组最后一项的值。

对:((ObjectItem*)tempListDetail.lastObject).isLive=YES;

错了:[((ObjectItem*)tempListDetail.lastObject) isLive]=YES; 我不知道为什么错了:(

如果你知道,请告诉(解释)我,谢谢。对不起,如果我有任何烦恼或错误:D

【问题讨论】:

    标签: objective-c attributes call


    【解决方案1】:

    使用方括号语法为isLive 调用setter 的方式不同:将getter 的名称(与属性的名称一致)替换为setter 的名称,如下所示:

    [((ObjectItem*)tempListDetail.lastObject) setIsLive:YES];
    

    当您使用点语法时,Objective C 编译器会为您执行这个小转换,因此代码最终会在两种情况下调用相同的 setter。这里没有“更好”或“更差”的语法 - 选择一个您更喜欢的语法,并在整个程序中始终如一地使用它。

    【讨论】:

      【解决方案2】:

      使用点表示法允许您设置属性。调用isLive方法只返回一个值,设置属性需要调用setter-setIsLive:

      【讨论】:

        猜你喜欢
        • 2012-02-05
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 2012-03-03
        • 2011-05-15
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多