objective-c - 括号+点语法问题

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

我已经使用 Objective C 几个月了,这是我第一次在 Objective C 中看到这种类型的语法。我想我知道它的等价物,但我想确定。

具体来说,代码是这样的

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

'[player texture].contentSize.height 相当于什么? 我知道点和括号语法可以是同一件事

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

上面两个差不多..

这就是我的第一个示例中发生的情况吗?我只是从未见过括号和点语法混合在一起。

谢谢。

最佳答案

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

这可能与:

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

当应用于对象指针时,点语法会转换为调用适当的属性访问器方法。当应用于结构时,它是对该结构的其中一个字段的直接访问。

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

混合点语法的两种不同含义可以很好地获取 一个值,但如果您尝试使用它来设置 值,则会出现错误。如果我在上一段中的假设是正确的,你就不能这样做:

[player texture].contentSize.height = 50;

关于objective-c - 括号+点语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8698647/

相关文章:

ios - iPhone 上的 LPD 网络打印机

java - 在一行中初始化 Java 数组

objective-c - 动画 UIView 框架, subview UIScrollView 并不总是动画

iphone - 如何禁用 UIWebview 水平滚动?

ios - 一个项目中多个 UIImage+ImageEffects 文件

objective-c - 为什么从容器中获取对象时引用计数没有增加?

ios - NSFetchedResultsController 的复杂获取请求

ios - 在 iOS 中制作一个调用电话号码的按钮

语法错误 : identifier 'DXGI_RGBA in file dxgi1_2. h

scala - 在 Scala 中使用 "val capacity : Int"而不是 "val Int Capacity"的任何原因