2011-05-16 92 views
3

當我們創建核心數據自動對象我看到一行爲什麼自動生成的Core Data Project包含managedObjectContext的合成?

@synthesize managedObjectContext=__managedObjectContext; 

不過,我不認爲我們永遠都需要該行因爲代碼也產生一個功能

- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (__managedObjectContext != nil) 
    { 
     return __managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) 
    { 
     __managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [__managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return __managedObjectContext; 
} 

所以我是什麼在這裏失蹤?

爲什麼要合成我們寫的代碼?

+0

您正在使用哪個項目模板?當我創建一個空白的Core Data項目時,我沒有看到@synthesize指令,它對我來說看起來是多餘的。 – omz 2011-05-16 17:26:43

回答

2

@synthesize指令

...告訴[S],它應該合成setter和/或者getter方法的屬性,如果你不將@implementation內提供給他們的編譯器。

您仍然可以創建自己的實現。

那麼爲什麼要用@synthesize?將名爲__managedObjectContext變量(存儲)與屬性(公共接入點)關聯,稱爲managedObjectContext

爲什麼這樣做?正如Henrik指出的那樣,您可以對存儲進行懶惰設置。

+0

我注意到__managedObjectContext對於延遲加載來說有點必要。我錯過了。沒有它,你不能直接「分配」managedObjectContext,因爲該屬性是隻讀的。所以你需要一個名稱不同於原始變量名稱的實際私有變量。 – 2011-05-20 04:38:58

1

因爲@synthesize managedObjectContext=__managedObjectContext;爲您的property(一個實例變量)創建了在對象範圍內有效的getter和setter。你正在訪問這個屬性,而你的(懶惰)在你提到的方法中設置它。

+0

是的,但要綜合什麼?首先,沒有指定它是隻讀的setter。唯一合成的就是吸氣劑。但是,我們定義了getter。那麼還有什麼可以綜合的呢? – 2011-05-16 14:21:13

相關問題