[objective-c] @synthesize vs @dynamic, quali sono le differenze?


3 Answers

Dai un'occhiata a questo articolo ; sotto il titolo "Metodi forniti in fase di runtime":

Alcuni accessor vengono creati dinamicamente in fase di runtime, come quelli utilizzati nella classe NSManagedObject di CoreData. Se si desidera dichiarare e utilizzare le proprietà per questi casi, ma si desidera evitare avvisi relativi ai metodi mancanti al momento della compilazione, è possibile utilizzare la direttiva @dynamic anziché @synthesize.

...

L'uso della direttiva @dynamic dice essenzialmente al compilatore "non ti preoccupare, è in arrivo un metodo".

La direttiva @synthesize , d'altra parte, genera i metodi accessor per te in fase di compilazione (sebbene, come indicato nella sezione "Mixing Synthesized and Custom Accessors", sia flessibile e non generi metodi per te se entrambi sono implementati).

Question

Quali sono le differenze tra l'implementazione di @property con @dynamic o @synthesize ?




@dynamic viene in genere utilizzato (come è stato detto sopra) quando una proprietà viene creata dinamicamente in fase di runtime. NSManagedObject fa questo (perché tutte le sue proprietà sono dinamiche) - che sopprime alcuni avvisi del compilatore.

Per una buona panoramica su come creare proprietà dinamicamente (senza NSManagedObject e CoreData :, vedere: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html#//apple_ref/doc/uid/TP40008048-CH102-SW1




Come da documentazione:

developer.apple.com/library/mac/documentation/cocoa/conceptual/…

@dynamic dice al compilatore che i metodi di accesso sono forniti in fase di runtime.

Con un po 'di indagine ho scoperto che fornire metodi di accesso sovrascrive la direttiva @dynamic.

@synthesize dice al compilatore di creare quegli accessor per te (getter e setter)

@property dice al compilatore che gli accessor verranno creati e che è possibile accedere con la notazione punto o [messaggio oggetto]




Secondo la documentazione di Apple.

Si utilizza l'istruzione @synthesize nel blocco di implementazione di una classe per dire al compilatore di creare implementazioni che corrispondono alle specifiche @property dichiarazione @property .

Si utilizza l'istruzione @dynamic per dire al compilatore di sopprimere un avviso se non riesce a trovare un'implementazione dei metodi accessor specificati da una dichiarazione @property .

Ulteriori informazioni:-

https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/DeclaredProperty.html




Related