我是ios开发的新手。我想知道之间的区别:
[object1 method];
object1.method;
我知道它是一样的但我仍然有困惑。
感谢您的帮助。
答案 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的以下文档链接的“方法和消息”部分,您将看到它无关紧要。您可以使用方括号或点表示法发送消息。这适用于属性或调用方法。无论何时构建应用程序,编译器都会将点表示法转换为方括号,因此无论如何,代码在运行时都是完全相同的。