首先,我的回答是基於最新鏘編譯器,舊版本的工作稍有不同。
所以,你不是創建一個對象都沒有。你甚至沒有宣稱在其中兩個對象。
在第一種情況下,您實際上告訴編譯器您需要公開名爲text
的屬性NSString
。編譯器所做的是爲你自己聲明一個實例變量_text
(你可以通過這種方式訪問而不會出現問題)以及獲取和設置實例變量所需的方法。正如你所看到的,存儲仍然是內部的,你只需要爲你設置getter和setter。
在第二種情況下,您實際上是自己聲明一個實例變量(ivar),就像編譯器使用_text
一樣。用_
作爲前綴是習慣用法。存儲仍然是內部的。最重要的是,你不能從外面訪問你的伊娃,因爲它沒有getter或setter,隱式聲明是@private
。
在第三種情況下,您將創建一個匿名類別(因此爲空圓括號),將類添加到您的類中。對於這個問題的存儲有點難以解釋,如果您對此感到好奇,可以搜索Apple文檔,查看類別是什麼等等。在這種情況下,你只能從你的課堂中訪問你的財產,這使得它在某種程度上是多餘的(吸氣者和設置者),你可以宣佈它是一個伊娃。
您也可以聲明你的高德這樣的:
@interface GenericViewController : UIViewController{
NSString * text;
}
@end
@implementation GenericViewController{
NSString * text;
}
@end
以上兩者具有本地存儲和私有可見(不能從外部訪問)。兩者之間的區別在於實現中聲明的實例變量隱式隱藏,可見性無法通過@public,@protected和@private進行更改。如果您使用這些指令,則不會收到編譯器錯誤,但會被忽略。
那麼,第三個將不會工作,除非你添加'()'並將'@屬性'放在'@ end'之前。但是您需要了解屬性和實例字段之間的差異。 –
請賜教。 – KKendall
(您還需要在第一種情況下將該屬性放置在結尾之前。) –