objective-c dynamic swift3

objective c - Swift 3-dinámico vs @objc



objective-c dynamic (2)

Como dice esa cita, dynamic implica @objc .

A menos que especifique una clase como dynamic , el compilador puede optimizar y alinear sus métodos. Esto brinda enormes beneficios de rendimiento, pero significa que no puede cambiar esas implementaciones de métodos en tiempo de ejecución. Si planea perder el tiempo con esos métodos en tiempo de ejecución utilizando las capacidades de reflexión del tiempo de ejecución de Objective C, necesitará usar dynamic . Usted incurrirá en una penalización de rendimiento (su código se ejecutará en los niveles de velocidad del Objetivo C, en lugar de cerca de los niveles de C), pero obtendrá ese dinamismo adicional.

¿Cuál es la diferencia entre marcar un método como @objc vs dynamic, cuándo harías uno frente al otro?

A continuación está la definición de Apple para dinámica.

dynamic Aplica este modificador a cualquier miembro de una clase que pueda ser representado por Objective-C. Cuando marca una declaración de miembro con el modificador dinámico, el acceso a ese miembro siempre se distribuye dinámicamente utilizando el tiempo de ejecución de Objective-C. El compilador nunca transfiere o desvirtúa el acceso a ese miembro.

Debido a que las declaraciones marcadas con el modificador dinámico se envían utilizando el tiempo de ejecución de Objective-C, están implícitamente marcadas con el atributo objc.


Una función / variable declarada como @objc es accesible desde Objective-C, pero Swift continuará @objc directamente a través del despacho estático o virtual. Esto significa que si la función / variable se modifica a través del marco de Objective-C, como lo que ocurre cuando se usa Key-Value Observing o las diversas Objective-C API para modificar clases, llamar al método de Swift y Objective-C producirá resultados diferentes.

El uso de dynamic le dice a Swift que siempre se refiera al despacho dinámico de Objective-C. Esto es necesario para que cosas como Key-Value Observing funcionen correctamente. Cuando se llama a la función Swift, se refiere al tiempo de ejecución de Objective-C para distribuir dinámicamente la llamada.