如果我说那是正确的
[anIstance aMethod];
相当于
anIstance.aMethod; --?
如果是这种情况,那么采取一个或多个参数的方法呢?
是否有以下声明
[anIstance aMethod : aParameter];
有一个等效的点符号吗?
我试过
anIstance.aMethod : aParameter;
anIstance.aMethod(aParameter);
它们似乎不起作用(编译时错误)
如果没有办法用点符号调用带参数的方法那么合成的setter方法(根据我的定义,根据定义采用参数)?
如果我有一个合成属性,请执行以下语句
anIstance.aProperty = anotherObject;
调用相对setter方法?或者它是否调用getter方法?
答案 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中属性的语法糖,你不能将它用于一般方法调用。