2013-05-03 54 views
1

很明顯,@synthesize爲對象定義了setter和getter。@合成「_」符號

但目前尚不清楚對我說:

@synthesize managedObjectContext = _managedObjectContext; 

是什麼意思?爲什麼不以這種方式實現它:

@synthesize managedObjectContext; 

這似乎更容易?

另外,它是否與懶惰的編程有關,這意味着你必須自己編寫setter和getter?

希望有人可以幫助;)

+1

你不需要再合成了,因爲xcode 4.2(?),它會被隱式添加爲'@sythesize foo = _foo;'所以最懶惰的編程就是不合成和使用下劃線。但不檢查文檔不是懶惰的編程 - 這太懶惰了。 – vikingosegundo 2013-05-03 15:54:37

回答

2

這只是一個約定人們用它來給財產和伊娃名字不同。該物業將被稱爲managedObjectContext,iVar將被稱爲_managedObjectContext

如果他們都被命名爲相同,那麼將它們混淆可能相當容易,而將它們混合起來可能會產生意想不到的結果,因爲使用iVar名稱將繞過該屬性上的任何setter和getter。

除此之外,它沒有實際功能。

+0

那麼我應該什麼時候以這種方式實施呢?因爲通常我們只是簡單地將它合成爲後者,例如@synthesize certainButton; – JackieLam 2013-05-03 15:37:52

+0

另外,它是否與懶惰的編程有關,這意味着你必須自己編寫setter和getter? – JackieLam 2013-05-03 15:38:43

+0

@JackieLam認爲它更像一種方便而不是規則。它只是將iVar重命名爲使它更難以混淆兩者,它使iVar或屬性的功能完全沒有區別。比較一下ObjectiveC中的縮進,這對於可讀性很方便,很多人都這樣做,但是在代碼的功能上沒有任何區別。 – 2013-05-03 15:39:26