天天看點

OC關鍵字[email protected]

@dynamic這個關鍵詞,通常是用不到的。

它與@synthesize的差別在于:

使用@synthesize編譯器會确實的産生getter和setter方法,而@dynamic僅僅是告訴編譯器這兩個方法在運作期會有的,無需産生警告。

假設有這麼個場景,B類,C類分别繼承A類,A類實作某個協定(@protocol),協定中某個屬性( somePropety )我不想在A中實作,而在B類,C類中分别實作。如果A中不寫任何代碼,編譯器就會給出警告:

“use @synthesize, @dynamic or provide a method implementation"

這時你給用@dynamic somePropety; 編譯器就不會警告,同時也不會産生任何預設代碼。

@dynamic 就是要來告訴編譯器,代碼中用@dynamic修飾的屬性,其getter和setter方法會在程式運作的時候或者用其他方式動态綁定,以便讓編譯器通過編譯。其主要的作用就是用在NSManageObject對象的屬性聲明上,由于此類對象的屬性一般是從Core Data的屬性中生成的,Core Data架構會在程式運作的時候為此類屬性生成getter和Setter方法。

繼續閱讀