2010-01-19 80 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