没有[]的Objective-c调用方法

时间:2012-05-27 12:25:48

标签: objective-c

方法调用之间的区别是什么:
time.text = s;
[time setText:s];

如果有的话?

https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOS/JumpRightIn/iPhone101/Articles/06_ImplementingController.html的教程同时使用:
- (IBAction)changeGreeting:(id)sender {
self.userName = self.textField.text;
NSString *nameString = self.userName;
if ([nameString length] == 0) {
nameString = @"World";
}
NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString];
self.label.text = greeting;
}

什么时候用什么? 如果重要,我相对于Objective-C很新。

3 个答案:

答案 0 :(得分:3)

AFAIK他们都是一样......

time.text = s;

在内部执行... [time setText:s];

较早的只是点符号,有些人发现它更容易使用,并且在其他语言中非常普遍。

编辑:

要添加的另一件事是我只是指这里的属性,因为只有他们有吸气剂和制定者。方法调用是一个不同的东西,因为你可以传递更多的参数。

答案 1 :(得分:3)

其他答案有一些优点,但也有一些困惑。这是我的看法:

括号表示法是发送消息/调用方法的一般语法。

有各种不同的方法。一种特殊的方法是访问器 - 属性的setter和getter。

点语法是调用访问器的另一种形式。它是一种更新的风格,在过去几年中刚刚添加到语言中。使用它纯粹是可选的,如果你发现它更清晰,更简洁。区别在于纯粹的装饰性。使用点语法与调用访问器(getter或setter)相同,具体取决于在较大表达式中如何使用子表达式。

答案 2 :(得分:0)

点语法(time.text = s)是属性设置器和getter使用的特殊情况。如果使用@property关键字声明属性,然后使用@synthesize setter和getter声明属性,或者声明使用@dynamic独立生成setter和getter,则可以使用点访问setter和getter语法。

例如,在我的接口文件中,我声明了一个属性myInt:

@property (readwrite, assign) int myInt;

在该声明中readwrite表示我想要一个getter和一个setter,assign表示我希望将值分配给myInt而不是保留或复制。然后在我的界面中写道:

@synthesize myInt;

我现在有一个名为myInt的属性,我可以使用self.myInt进行访问,并使用self.myInt = ...进行设置。

使用方括号如[nameString length]是在Objective-C中调用对象上的方法的标准方法,也适用于生成的属性([self myInt])。点语法只是属性的快捷方式。