2011-03-25 11 views

Respuesta

13

@dynamic significa que proporcionará una implementación de esos métodos dinámicamente en tiempo de ejecución.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html

tiene todos los detalles, pero básicamente utilizando medios @dynamic que prometen proporcionar implementaciones para los métodos prometidos propiedad en tiempo de ejecución.

En particular mira aquí;

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

para un ejemplo de cómo le gustaría construir su método dinámico y colocarlo en el tiempo de ejecución.

Core Data utiliza este mecanismo para proporcionar los accesos. Es increíblemente genial, una vez que profundizas :)

Y como nota al margen, meta-programación en ObjC no es para los débiles de corazón, no lo envíes hasta que lo entiendas, de lo contrario tus usuarios sufrirán .

2

Usando @dynamic requiere que se proporcione métodos de captador/definidor usted mismo.

En su lugar @synthesize crea los métodos getter/setter para usted.

+2

Algunas clases generarán métodos automáticamente, como NSManagedObject. –

5

cito el libro de Apple The Objective-C Programming Language:

@dynamic

utiliza la palabra clave @dynamic para contar el compilador que va a cumplir el contrato API que implica una propiedad ya sea proporcionando método implementaciones directamente o en tiempo de ejecución utilizando otros mecanismos como carga dinámica de código resolución. Suprime las advertencias que el compilador de lo contrario generaría si no puede encontrar las implementaciones adecuadas. Debe usarlo solo si sabe que los métodos estarán disponibles en tiempo de ejecución.

Puede encontrar una copia en PDF here.

+0

+1: Buena explicación. – FreeAsInBeer