2012-06-01 61 views
10

當我在ARC模式下爲CoreData中的實體創建模型對象時,它會生成保留而不是強壯。那麼保留工作並在ARC模式下編譯也是如此?我認爲在ARC模式下,我們不能使用發佈,autorelease和保留關鍵字?ARC中的CoreData模型對象使用retain

+0

嗯這是令人驚訝的,沒有反應? – theiOSguy

回答

4

你的意思是說它會產生一個這樣的聲明@property

@property (nonatomic, retain) MyObject *object; 

retain屬性的意思是在ARC下的strong

4.1.1. Property declarations

+1

這很好,但並沒有真正回答這個問題,我喜歡這個人使用ARC創建了一個項目,並且在將Core Data添加到混合中時,NSManagedObjects正在使用保留的屬性生成,而不是強壯。雖然在ARC項目中這不應該是合法的,除非另有規定爲項目的非ARC部分,這是一個奇怪的事情。應該預計使用強不保留,或者至少編譯器應該抱怨它不符合ARC規則......任何其他想法 – Daniel

+10

ARC不禁止使用'retain'關鍵字。它禁止使用'retain'選擇器。關鍵字和選擇器完全不同。請參閱我鏈接的文檔的第7.1.1節。 –

+0

感謝您的額外信息 – Daniel

4

請看看這個答案:https://stackoverflow.com/a/10036821/662605

它的要點是,如果你@synthesize你的屬性,然後在引擎蓋下生成的代碼將依託retain類型(retainassigncopy)。

生成管理對象的子類使用@dynamic沒有@synthesize,所有這些東西奇蹟般地發生了你,所以實際上,雖然它的混亂,retain關鍵字不使用它似乎,因此電弧不抱怨..我很肯定就是這樣。

雖然我曾嘗試換用@synthesize,仍然沒有得到錯誤的實現,但我認爲我們可以到一些與答案的鏈接

其他任何見解將是很好的。