括号+点语法问题

时间:2012-01-02 08:03:17

标签: objective-c cocoa-touch syntax cocos2d-iphone

我一直在使用Objective C几个月,这是我第一次在目标c中看到这种语法。我想我知道相当于它,但我想确定。

具体来说,代码看起来像这样

float imageHeight = [player texture].contentSize.height;

'[player texture] .contentSize.height等同于什么? 我知道点和括号语法可以是一样的

something.backgroundColor = [UIColor redColor];
[something setBackgroundColor:[UIColor redColor]];

以上两者几乎相同......

这就是我的第一个例子中发生了什么?我从未见过将括号和点语法混合在一起。

感谢的。

1 个答案:

答案 0 :(得分:4)

float imageHeight = [player texture].contentSize.height;

这可能与以下内容相同:

float imageHeight = [[player texture] contentSize].height;

Dot语法转换为在应用于对象指针时调用适当的属性访问器方法。当应用于结构时,它可以直接访问该结构的一个字段。

因此,假设[player texture]返回指向对象(可能是图像)的指针,则首先使用点语法访问该对象的contentSize属性。如果-contentSize也返回一个对象指针,那么下一次使用也将转换为一个访问者的调用。但更可能的是,contentSize属性是NSSize,而NSSize是具有widthheight字段的结构。因此,第二次使用点语法很可能会从该结构中检索height字段。

混合点语法的两种不同含义适用于获取值,但如果您尝试将其用于设置值,则会出错。如果我在前一段中的假设是正确的,则不能这样做:

[player texture].contentSize.height = 50;