2010-01-14 19 views
8

De los documentos que estaba leyendo que @dynamic crea los métodos de acceso en tiempo de ejecución, mientras que @synthesize creará los accesos en tiempo de compilación.¿Cuáles son las diferencias entre @dynamic y @synthesize?

Así que déjame adivinar: @dynamic ahorra algo de memoria y el código se mantiene más pequeño en las páginas de memoria? ¿o que? y ¿qué otras diferencias hay entre estas?

¿Estaría bien si dijera: "Siempre es una buena idea usar @dynamic en lugar de @synthesize"? Quiero decir ... si eso realmente le ahorra memoria, ¿por qué no?

Pero supongo @dynamic tiene alguna desventaja sobre @synthesize, de lo contrario, todos usarían @dynamic. Entonces, ¿cuáles son los inconvenientes?

Respuesta

21

No. Las propiedades dinámicas no se generan automáticamente. @dynamic propiedades marcador indica al compilador que que va a proporcionar el descriptor de acceso y emisores de alguna manera:

De Objective-C Programming Language Guide:

@dynamic

utiliza la palabra clave @dynamic para decirle al compilador que va a cumplir el contrato API implicado por una propiedad, ya sea proporcionando implementaciones de métodos directamente o en tiempo de ejecución utilizando otros mecanismos, como la carga dinámica de código o la resolución de métodos dinámicos.

7

No, @dynamic dice que las implementaciones serán proporcionados en tiempo de ejecución. @synthesize le dice al compilador que cree las implementaciones por usted. Utilizaría @dynamic con, por ejemplo, Datos centrales, que genera implementaciones de propiedades en tiempo de ejecución. Si no usa ninguno, el compilador supone que proporcionará las implementaciones.

2

No, @dynamic no obtendrá ninguna ventaja de tamaño de código/memoria

Cuestiones relacionadas