NSArray(和其他Cocoa类型)@property值

时间:2011-02-24 04:52:06

标签: objective-c cocoa properties nsarray nsdictionary

在调试同事编写的代码的过程中,我偶然发现了让我神秘化的以下内容:

NSMutableArray *array = [NSMutableArray array];
NSUInteger arrayCount = array.count;

为什么这样做?它也适用于NSDictionary和其他类型,但在文档和Cocoa标题中都没有找到@property定义。

谷歌搜索“NSArray属性”并没有产生很多有用的结果,所以我正在向SO伸出援手,这肯定是一个非常令人尴尬的问题。

2 个答案:

答案 0 :(得分:6)

它的工作原理是因为点语法与属性无关。它只是语法糖(虽然我不喜欢它,所以也许它是“语法盐”)。

当您使用点语法作为表达式的右值(或等号右侧的表达式)时,它会变为简单:

bar = myObject.thing;

bar = [myObject thing];

当点位于等号的左侧(作为左值)时,它将其变为设定器。所以:

myObject.thing = 42;

变为

[myObject setThing:42];

所以是的,你可以做myObject.retain之类的事情。但你永远不应该那样做。您应该只使用点语法作为声明属性的访问器(即,已通过@property显式声明的内容)。 <插入关于你永远不应该使用点语法的评论。>

有关详情,请查看the documentation on dot syntax(特别是“错误使用”部分)。

答案 1 :(得分:2)

点语法实际上只是访问不带参数并返回像array.count这样的值的方法的替代方法。以这种方式实际访问方法是不好的形式。

它也可以用于[object setValue:(id)something]之类的东西,并通过执行object.setValue = something来访问它;