我一直在使用Objective C几个月,这是我第一次在目标c中看到这种语法。我想我知道相当于它,但我想确定。
具体来说,代码看起来像这样
float imageHeight = [player texture].contentSize.height;
'[player texture] .contentSize.height等同于什么? 我知道点和括号语法可以是一样的
something.backgroundColor = [UIColor redColor];
[something setBackgroundColor:[UIColor redColor]];
以上两者几乎相同......
这就是我的第一个例子中发生了什么?我从未见过将括号和点语法混合在一起。
感谢的。
答案 0 :(得分:4)
float imageHeight = [player texture].contentSize.height;
这可能与以下内容相同:
float imageHeight = [[player texture] contentSize].height;
Dot语法转换为在应用于对象指针时调用适当的属性访问器方法。当应用于结构时,它可以直接访问该结构的一个字段。
因此,假设[player texture]
返回指向对象(可能是图像)的指针,则首先使用点语法访问该对象的contentSize
属性。如果-contentSize
也返回一个对象指针,那么下一次使用也将转换为一个访问者的调用。但更可能的是,contentSize
属性是NSSize,而NSSize是具有width
和height
字段的结构。因此,第二次使用点语法很可能会从该结构中检索height
字段。
混合点语法的两种不同含义适用于获取值,但如果您尝试将其用于设置值,则会出错。如果我在前一段中的假设是正确的,则不能这样做:
[player texture].contentSize.height = 50;