2

我这样说对吗

[anIstance aMethod];

相当于

anIstance.aMethod; --?

如果是这种情况,那么带有一个或多个参数的方法呢?

做下面的语句

[anIstance aMethod : aParameter];

有等效的点符号吗?

我试过了

anIstance.aMethod : aParameter;

anIstance.aMethod(aParameter);

而且它们似乎不起作用(编译时错误)

如果没有办法用点表示法调用带有参数的方法,那么合成的 setter 方法(据我所知,根据定义接受一个参数)呢?

如果我有一个综合属性,请执行以下语句

anIstance.aProperty = anotherObject;

调用相对setter方法?还是它调用getter方法?

4

4 回答 4

3

这在 Apple 的“ The Objective C Programming Language ”指南中有所介绍:

@interface MyClass : NSObject
{
    float value;
}
@property float value;
@end

您可以将属性声明视为等同于声明两个访问器方法。因此

@property float value;

相当于:

- (float)value;
- (void)setValue:(float)newValue;
于 2010-01-19T14:05:47.907 回答
3

其他答案传达了总体思路,但我想明确指出点符号和属性是单独的概念。点表示法适用于 setter(命名为setSomething:采用单个参数的方法)和 getter,也可用于任何不采用参数的方法(尽管将其用于类似 的操作是非常myObject.doSomething糟糕的风格)。

属性旨在更轻松地声明 getter 和 setter,甚至为您生成代码。

所以这两个概念是相关的,但是完全有可能(而且并不总是糟糕的风格)将点符号与您自己的 getter 和 setter 一起使用,您自己编写的。使用属性也是完全可能的(而且通常完全可以接受!),即使是为您生成的 getter 和 setter,使用正常的括号语法,而不是点表示法。

但是为了解决最初的问题,不,点表示法不带参数。它专门设计用于不带参数的方法。

于 2010-01-20T00:05:37.593 回答
0

点表示法仅对属性有效。在 Objective-C 中使用@property声明来声明属性

像这样:

interface MyClass {
   NSString * x;
}

@property (copy) NSString *x;

执行:

@synthesize x;

// this will generate a setter and getter method:
// - (NSString *) x {}
// - (void) setX:(NSString *)value {}

那么你可以使用:

MyClass *obj = [[MyClass alloc] init];

obj.x = @"test";

但这仅适用于属性。不为方法。

于 2010-01-19T14:02:24.060 回答
0

点表示法只是 Objective-C 中属性的语法糖,你不能将它用于一般的方法调用。

于 2010-01-19T14:05:22.417 回答