2009-04-30 107 views

回答

7

你寫@property在頭文件

@property float value; 

等同於:

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

它獲得其它類的信息,你的類有這個方法

@synthesize phisicaly CREATE這些方法在課堂實施

+1

它不完全等價:使用@property還允許使用點符號,例如object.value,object.value = 1.0f; – Elliot 2011-09-06 00:56:52

9

@property將該名稱聲明爲屬性。這意味着,它可以通過點語法訪問(object.value)。

@synthetize可以看作是一個宏,它創建了getter和setter方法。知道你可以重寫這些方法是有用的,即使你鍵入了@synthetize

+0

然而,重要的是要注意,像往常一樣聲明的方法可以通過點語法來訪問,而不僅僅是屬性(儘管我不會推薦對不是getter或setter的任何東西使用點語法)。而且,更重要的是,如果沒有@synthesize,你的屬性不能被任何*方法訪問。如果你使用@property而不使用@synthesize,就像聲明getter和setter方法一樣,但從不實現它們。 – andyvn22 2009-08-09 18:31:05

4

@property聲明getter和/或setter

@synthesize實現它們。

1

有一個常見的誤解,即爲了實現使用@property指令創建的setter和getter,需要@synthesize指令,但事實並非如此。使用不帶@synthesize的@property指令仍然會生成setters/getters並允許使用點符號。但是,省略@synthesize指令將導致編譯器生成具有前導下劃線字符的相應實例變量,例如,屬性myVar將具有_myVar的實例變量。

使用前導下劃線是一種常見約定,它允許區分屬性和實例變量。屬性和實例變量共享相同的名稱也很常見,這是默認情況下@synthesize所做的。

+1

這個問題沒有被回答。 – vikingosegundo 2014-07-15 11:17:26