2010-01-09 137 views

回答

16

你問簡單來說:

@property在 類的頭聲明屬性

@property (nonatomic, retain) NSString *myString; 

@synthesize創建是你的setter和 吸你的財產(訪問 方法)

沒有合成你必須寫 自己的setter和getter FPGA實現,像getMyString或 setMyString(利用你的財產的第一 字符)

山姆:只是一個建議:http://www.cocoadevcentral.com/d/learn_objectivec/是一個非常堅實的資源,瞭解像屬性這樣的基礎知識。

祝你好運!

+0

是的,但我的應用程序沒有它運行良好。那麼,他們爲什麼需要? – 2010-01-09 08:45:25

+0

他們不需要*他們只是用於節省時間和避免錯誤。 – 2010-01-09 08:46:58

+0

在桌面上可以使用手動內存管理,也可以使用垃圾收集器。手動管理工作正常,但使用垃圾收集很有用,節省時間並減少錯誤。 – Abizern 2011-06-03 01:16:04

6

屬性和合成訪問器是Objective-C 2.0中的新功能。

當你聲明一個@property時,你聲明瞭一個實例var。然後你訪問該方法的屬性(即getter和setter)。

如果您有興趣,還有@dynamic訪問器。

你應該真的在這做你的功課。蘋果有這個漂亮的pdf。

+0

你可以把我鏈接到pdf嗎? – 2010-01-09 08:52:58

+5

我爲你搜索:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/ObjC。pdf – Eimantas 2010-01-09 08:57:39

+0

歡呼Eimantas – 2010-01-09 09:27:15

0

默認情況下,我們所有的變量都是私有的,所以我們不能從類中取出。 如果我們想在課堂外使用我們的實例變量。 當你聲明一個@property時,你聲明瞭一個實例var。然後你訪問該方法的屬性(即getter和setter)。

如果您有興趣,還有@dynamic訪問器。

2

想想都Objective-C的魔術只是一個「聰明宏」,像一個「智能#define語句:」如果你注意的是始終在.h文件 @property, @synthesize總是在M檔。 所以在後臺 @property(無論)NSString * myString;

成爲2個方法和一個私有變量的聲明;

void set_myString:(NSString *) str; 
(NSString*) get_myString; 

聲明在頭文件

讓他們做一些事情,當你在 @synthesize的myString鍵入他們實現加入到M檔; 變成類似 void set_myString:(NSString *)str { myString = str; }

(NSString *) get_myString 
{ 
    return (myString); 
} 

但它取決於如果你說「保留」,「強」或「弱」 它要麼指針剛剛回歸的myString或將在myString的複製到一個新的比這 更聰明對象

因此,所有這些都是由編譯器通過閱讀您的聲明自動完成的。 這是非常有用的,可以節省很多時間

0

它只是在它自己的類中設置屬性的設置器變量名稱。 例如讓我說我有這個:@property (nonatomic, copy) NSArray* viewControllers;

那麼,如果我想訪問setter _viewController我不會設置合成變量。 但如果我想通過名稱viewController而不是_viewController訪問viewController變量,我會做@synthesize viewController;

如果我想用它作爲一個完全不同的名字,我可以這樣做@synthesize viewControllers = viewControlololer;但這只是一個setter。你會注意到[self viewControllers]只有作品,而不是[self viewControlololer];

所以我不明白爲什麼每個人都寫集屬性的「setter和getter」。它根本不會改變getter變量......除非這意味着[self viewController]意識到viewControlololer(顯然)。

0

其實屬性是隱式或顯式合成的。屬性是隱式合成的。因此,除非想將變量的名稱更改爲與_property_name不同的名稱,否則不需要使用合成。

還有其他用例,例如如果你不想讓實例變量支持你的屬性。

通過使用@synthesized指令顯式合成屬性。

(解答摘自大書呆子牧場指南)

相關問題