2012-02-04 51 views
3

由於Objective-C不支持類中的常量實例變量,有些替代方法可以確保變量的值不會被更改嗎?我不想訴諸預處理器#定義,因爲我更喜歡類變量。另外,是否有一個原因不支持const實例變量?Objective-C中const實例變量的替代方法?

回答

5

Objective-C中的對象的構造方式與C++或Java中的不同。在調用init方法之前,通過alloc方法將所有實例變量初始化爲零,因此在調用init以調用const實例變量時會太遲。顯然,編譯器編寫者可以修改編譯器以支持在init方法中更改const實例變量,但他們還沒有這樣做。

通常,您只需製作實例變量@private並使用訪問器方法公開它們。如果您不希望實例變量的值發生更改,請不要公開setter方法,也不要在您的類實現中修改該變量。

如果您放棄對32位Mac OS X的支持,則可以將實例變量放在您的@implementation而不是@interface中,這樣可以完全保護它們免受其他類的干擾。

+0

完美,謝謝。 – fdh 2012-02-04 21:24:25

+0

'@ instance'?你是不是要說'@ interface'?我從來沒有聽說過@ @ instance關鍵字,並且最新的Xcode也沒有太多的關於它的_(高亮或完整)_。 – 2016-05-20 03:21:05

+0

是的,我的意思是'@interface'。感謝您指出了這一點。 – 2016-05-20 03:34:45