3

方法调用之间有什么区别: 如果有的话?
time.text = s;
[time setText:s];

https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOS/JumpRightIn/iPhone101/Articles/06_ImplementingController.html的教程同时使用了这两种方法: 什么时候使用什么? 如果这很重要,我对 Objective-C 来说是相对较新的。
- (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;
}


4

3 回答 3

3

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

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

有各种不同的方法。一种特殊的方法是访问器——属性的设置器和获取器。

点语法是调用访问器的另一种形式。这是一种较新的风格,只是在过去几年中添加到语言中。如果您发现它更清晰且不那么冗长,则使用它纯粹是可选的。区别纯粹是外观上的。使用点语法与调用访问器相同,无论是 getter 还是 setter,取决于子表达式在较大表达式中的使用方式。

于 2012-05-27T13:01:27.677 回答
3

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

time.text = s;

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

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

编辑:

要补充的另一件事是我在这里只指属性,因为只有它们有 getter 和 setter。方法调用是另一回事,因为您可以传递更多参数。

于 2012-05-27T12:30:09.420 回答
0

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

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

@property (readwrite, assign) int myInt;

在该语句中readwrite意味着我想要一个 getter 和一个 setter,并且assign意味着我希望将值分配给myInt而不是保留或复制。然后在我的界面中我写:

@synthesize myInt;

我现在有一个名为的属性myInt,我可以访问 usingself.myInt和 set using self.myInt = ...

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

于 2012-05-27T12:31:45.427 回答