调用方法ios

时间:2014-12-01 17:47:43

标签: ios objective-c methods

我是ios开发的新手。我想知道之间的区别:

  • [object1 method];
  • object1.method;

我知道它是一样的但我仍然有困惑。

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

有点令人困惑。理论上(至少根据某些“权威”),第二种形式只应用于属性,而不是常规声明的方法。在实践中,编译器似乎并不关心。

但是当然要注意第二种形式也可以用作分配目标(而不是价值来源) - object1.method = value2;。在这种情况下,代码将转换为[object1 setMethod:value2];

答案 1 :(得分:2)

第二种形式纯粹是“syntactic sugar”,它生成与括号形式完全相同的代码。

代码

object.property

调用方法

[object property](一个吸气剂)

object.property = value;

调用代码

  

[object setProperty:value];

正如其他人所指出的那样,使用点语法EXCEPT来调用属性的getter / setter被认为是不好的形式,但它确实有效。

一些语言纯粹主义者对点符号不屑一顾,说它语法上含糊不清

(表达式foo.bar可能意味着foo是一个对象而bar是该对象的属性, foo可能是一个C结构,bar可能是结构的一个字段。从那一段代码你无法分辨它是什么。你必须去看看foo的声明来分辨它。)

我看到纯粹主义者的观点,但同样喜欢点符号。键入和解析也简单得多。使用属性属性很容易丢失在复杂表达式中嵌套的括号。点符号使得更容易理解表达式的要点,并使其更简洁。

答案 2 :(得分:0)

从技术上讲,你可以使用点符号表示方法,但你不应该这样做。 Dot语法仅在使用属性时使用。对于方法,请使用常规消息语法([object selector];

答案 3 :(得分:0)

如果您向下滚动到Apple的以下文档链接的“方法和消息”部分,您将看到它无关紧要。您可以使用方括号或点表示法发送消息。这适用于属性或调用方法。无论何时构建应用程序,编译器都会将点表示法转换为方括号,因此无论如何,代码在运行时都是完全相同的。

https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/WriteObjective-CCode/WriteObjective-CCode/WriteObjective-CCode.html