2010-01-19 41 views
2

它是正确的,如果我说点符号 - 是否需要参数?

[anIstance aMethod]; 

相当于

anIstance.aMethod; --? 

如果是这样的话,那它们取一个或多个参数的方法?

下面的语句

[anIstance aMethod : aParameter]; 

是否有等效点符号?

我试图与

anIstance.aMethod : aParameter; 

anIstance.aMethod(aParameter); 

而且他们似乎并不工作(编译时错误)

如果没有调用与点符号怎么样的参数的方法的方式合成的setter方法(据我所知,这些方法根据定义进行争论)?

如果我有一个综合属性,做下面的语句

anIstance.aProperty = anotherObject; 

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

回答

3

其他的答案传达的总体思路,但我想,明确规定点标记和属性是不同的概念。点符号适用于设置者(方法名称为setSomething:,它采用单个参数)和吸气剂,也可以用于任何不采用参数的方法(虽然它的非常差用于类似myObject.doSomething的操作)。

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

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

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

+0

谢谢。在其他答案之后,我认为我完全没有目标,我很高兴看到也许情况并非如此。很有帮助。 – user236739 2010-02-01 15:11:13

0

点符号只对属性有效。属性与@property声明在Objective-C

这样宣称:

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"; 

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

+0

这帮了很大忙。 谢谢 – user236739 2010-01-19 14:44:55

+2

其实,你可以用它来做什么,遵循财产法命名惯例,但是这真的不是它的目标用户。 – 2010-01-19 17:56:03

0

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

+0

不正确;不只是为了物业。点符号可以用于任何单参数消息。 – AndrewS 2013-08-15 23:21:28

3

这是覆盖在苹果的“The Objective C Programming Language”指南:

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

你可以把属性 声明等价于 声明两个存取方法。因此

@property float value; 

等同于:

- (float)value; 
- (void)setValue:(float)newValue; 
+0

这帮了很大忙。 谢谢 – user236739 2010-01-19 14:45:42