点符号 - 是否需要参数?

时间:2010-01-19 14:00:23

标签: iphone objective-c parameters notation

如果我说那是正确的

[anIstance aMethod];

相当于

anIstance.aMethod; --?

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

是否有以下声明

[anIstance aMethod : aParameter];

有一个等效的点符号吗?

我试过

anIstance.aMethod : aParameter;

anIstance.aMethod(aParameter);

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

如果没有办法用点符号调用带参数的方法那么合成的setter方法(根据我的定义,根据定义采用参数)?

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

anIstance.aProperty = anotherObject;

调用相对setter方法?或者它是否调用getter方法?

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:3)

其他答案传达了一般的想法,但我想明确说明点符号和属性是单独的概念。点表示法适用于setter(名为setSomething:的方法,它采用单个参数)和getter,也可用于任何不带参数的方法(尽管它的非常样式很差)它用于像myObject.doSomething)这样的动作。

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

所以这两个概念是相关的,但是完全可能(而不是总是糟糕的风格)使用点符号和你自己的getter和setter,你写的用手。它也完全可能(通常完全可以接受!)使用属性,即使是为你生成的getter和setter,使用普通的括号语法,而不是点符号。

但是要解决原始问题,不,点符号不带参数。它专门设计用于不带参数的方法。

答案 2 :(得分: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";

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

答案 3 :(得分:0)

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