理解objective-c dot表示法

时间:2013-06-20 15:24:35

标签: objective-c

我正在学习objective-c,作为我学习的一部分,我试图在我看到的地方转换点符号,回到括号表示法(我现在更喜欢括号表示法)

所以我目前对世界的看法是:

  1. 2.0之前的Objective-c只有结构的点符号?
  2. Objective-c 2.0引入了属性的点表示法。这允许通过点表示法访问setter / getter?
  3. 无法将消息发送到结构?
  4. 在我正在阅读的一本书中,我遇到了以下代码,并且在我的前几次尝试中,我很难将其转换为括号表示法。

    ...
    CGRect switchViewFrame = switchView.frame;
    switchViewFrame.origin.y += [UIApplication sharedApplication].statusBarFrame.size.height;
    

    挖得更深,我得出以下结论......

    1. switchViewFrame.origin.y无法转换为括号表示法,因为switchViewFrame被定义为CGRect,它是Apple文档中的结构,因此点符号是必要的吗?

    2. 第二行的右值是括号和点的组合,因为shareApplication是UIApplication的类方法,因此会发送消息,但statusBarFrame被定义为CGRect的属性,即结构,因此点需要表示法吗?

    3. 非常感谢任何澄清这些观点的帮助。

      如果我完全被误解了,你实际上可以把它转换为括号表示法,你能否解释一下原因。

      由于

2 个答案:

答案 0 :(得分:1)

1)2.0之前的Objective-c只有结构的点符号? 是的,据我所知。
2)Objective-c 2.0引入了属性的点符号。这允许通过点表示法访问setter / getters?
3)消息无法发送到结构? 正确,发送消息相当于调用消息发送到的对象中的方法。
4)switchViewFrame.origin.y无法转换为括号表示法,因为switchViewFrame被定义为CGRect,这是苹果文档中的struct,因此点符号是必要的吗?
5)第二行的rvalue是括号和点的组合,因为shareApplicationUIApplication的类方法,因此会发送一条消息,但statusBarFrame是定义为CGRect的属性,即struct因此需要点符号? 否:statusBarFrameUIApplication对象的属性。但statusBarFramestruct,其成分originsize也是structs
所以你几乎无处不在。

答案 1 :(得分:0)

https://stackoverflow.com/a/10444012/2449268

解释得非常好,希望它能回答你的问题。

您也可以在框架上使用括号表示法如下:

CGRect switchViewFrame = switchView.frame; switchViewFrame.origin.y + = [[UIApplication sharedApplication] statusBarFrame] .size.height;