2013-03-02 63 views
0

我看到有人寫代碼這樣_iVar和@property?

@interface SomeClass:<NSObject>{ 
     NSString * _iVar; 

}

@property(nonatomic,retain)NSString *iVar; 

,並在實現文件

@synthesize iVar = _iVar; 

但我總是喜歡寫代碼是這樣的:

@interface SomeClass:<NSObject> 
@property(nonatomic,retain)NSString *iVar; 

,並實現文件

@synthesize iVar = _iVar; 

他們都工作正常,我可以用一個實例SomeClass的讓伊娃「someClass.ivar」。我只是知道爲什麼嗎?

回答

0

你現在甚至不需要綜合iVars了。最新的Xcode會自動爲每個屬性創建一個支持實例變量,屬性名稱前面加下劃線。

+0

這是否意味着如果我不寫{ NSString * _iVar; } xcode會爲我寫,現在我甚至不需要再寫@synthesize了? – Jackie 2013-03-02 06:16:19

+0

對,它已經被照顧好了。例外是如果你想要一個不同於默認的iVar名字。 – 2013-03-02 06:46:35

+0

我懂了,非常感謝! – Jackie 2013-03-02 06:49:29

0

在Objective-C中,當您通過「。」使用任何東西時。 (點語法),它正在訪問屬性。您已聲明併合成名爲iVar的屬性,因此您可以使用someClass.iVar來訪問它。

當您聲明一個屬性時,會自動創建一個變量。所以,即使你不創建一個變量,它也會在那裏。

爲避免歧義,人們使用不同的名稱創建屬性和iVar。因此,他們可以識別變量是正在使用還是正在使用某個屬性。在這種情況下,人們讓編譯器知道某個特定變量與低方式屬性相關聯:

@synthesize iVar = _iVar; 

如果你想直接外的類,而不是屬性,則應使用訪問變量「 - >」(箭頭句法)。

+0

我明白了,你的意思是如果我不寫'NSString * _iVar; }在接口文件中。非常感謝您的回答! – Jackie 2013-03-02 06:40:38

相關問題