在Objective-C中调用属性

时间:2014-10-17 09:29:09

标签: objective-c attributes call

我是Objective-C的新手。我之前学过其他一些程序语言,比如C ++,C#,Java。在这些语言中,调用属性或方法的语法是object.attributes,object.methods和Objective-C中的object.attributes,[object methods]。有时我可以在Objective-C中调用[对象属性],但有时我不能。当我可以使用两者时,我想知道是否存在任何差异,哪些情况更好。我们在Java,C#中使用语法[]是不一样的吗?

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

使用点表示法可以设置属性。调用方法isLive只返回一个值,以设置调用setter所需的属性 - setIsLive: