objective-c中[myString length]和myString.length有什么区别?

时间:2012-03-15 22:19:25

标签: objective-c square-bracket braces

我目前正在学习目标-c。方块围绕事物的确切含义是什么,使用它和使用句点之间有什么区别(我来自.NET世界所以这对我来说更简单)。

感谢。

2 个答案:

答案 0 :(得分:3)

他们在你的例子中都做同样的事情。 .是一种用于访问对象属性的简写。 []用于向对象发送消息。在你的例子中,那些碰巧是同一件事。如果您尝试发送不直接映射到属性名称的消息,您会注意到区别。

例如:[myString length]myString.length是相同的,但是如果你想设置的长度(让我们假设这个例子有意义),你'我需要做[myString setLength:newLength]myString.length = newLength之类的事情。除此之外,还有一些消息与属性名称不同 - 如下例所示:

[myString stringByReplacingOccurrencesOfString:@"hello" withString:@"world"];

使用.简写没有任何有意义的等价物。

答案 1 :(得分:1)

Objective-C使用消息而不是方法,这是主要语法(点语法是作为简单获取/设置消息的替代方法而引入的)。方法和消息之间显然存在显着的相似性,但也存在差异。

在Objective-C中,对象在运行时响应消息具有完全的灵活性。他们可以处理完全意外的消息,例如通过将其代理到另一个对象。或者,您可以在运行时将消息映射到列。这是基于追溯到Smalltalk的遗产。

只有 的.NET才能通过dynamic / DynamicObject / IDynamicMetaObjectProvider获得这种灵活性。当然,在任何一种语言中,编译时定义的方法/消息名称通常更合适。但是动态的用例很明显。

当然,Objective-C是C的超集,因此.用于其他事物(通常是结构或联合)。