2014-08-28 102 views
0

appDelegate.h爲什麼managedObjectContext屬性沒有合成自己的實例變量?

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 

我不得不這樣做在appDelegate.m

@synthesize managedObjectContext = _managedObjectContext; 

我很困惑,因爲根據蘋果

注:編譯器會自動合成的實例變量 在所有情況下,它也在合成至少一個訪問器或方法。如果爲讀寫 屬性或只讀屬性的getter實現了getter和setter,則編譯器將 假定您正在控制屬性實現 ,並且不會自動合成實例變量。如果你仍然需要一個實例變量,你需要請求合成一個 :@synthesize property = _property;

據此,它應該創建一個實例變量,只要它創建至少一個訪問器方法。那麼這是否意味着我在聲明該屬性時沒有創建訪問器方法?是什麼原因。請解釋。

我假設編譯器知道NSManagedObjectContext有訪問器方法。所以它沒有創建任何,因此它沒有創建實例變量。

回答

2

您沒有顯示相應的.m文件的代碼,但我假設您以編程方式實現managedObjectContext屬性getter方法。正如文檔所述,「編譯器會在所有情況下自動合成一個實例變量,並在其中合成至少一個訪問器方法。」但是,如果您爲readonly屬性提供了getter方法的實現,則編譯器不是合成任何存取器方法的

+0

好的,你是對的。我正在看視頻教程,並錯過了getter方法的實現。我曾假設他們沒有添加它。 – 3366784 2014-08-28 22:58:22

-1

正如文檔所言......如果您爲setter或getter提供了至少一個訪問器方法,它就像告訴編譯器一樣......不要打擾綜合這個變量,因爲我有一些定製工作需要setter/getter 。因此編譯器不會自動生成_ivar。如果你需要_ivar,你必須明確地指定它,然後繼續你的客戶獲取和設置。它的所有關於Objective C編譯器爲你做的事情,除非你說不要打擾......我知道我在做什麼。

相關問題