¿Cuáles son algunos ejemplos concretos de los beneficios del dinamismo en Objective-C?

Objective-C es una especie de lenguaje híbrido, en el que puedes ser tan dinámico y estático como quieras. Puede declarar todos los tipos de todas las variables si lo desea, incluso puede declarar variables delegadas como NSObject * si lo desea. El tipo de identificación funciona menos como un tipo real y más como una pista para el compilador diciéndole “oye, sé lo que estoy haciendo, solo confía en mí”, haciendo que el compilador evite cualquier tipo de verificación en esa variable en particular.

El primer beneficio del sistema de tipo Objective-C es que los tipos de contenedor (NSArray, NSDictionary, NSSet) aceptan y devuelven tipos de identificación. Esto elimina la necesidad de plantillas y genéricos por completo (como en C ++, Java y C #).

Aún mejor, en realidad puede tener contenedores con elementos de cualquier tipo dentro. Siempre que sepa lo que hay dentro, nadie se quejará si agrega dos NSStrings, un NSNumber y un NSValue dentro del mismo NSArray. Puede hacerlo en otros idiomas, pero debe usar la clase base “Objeto”, o el tipo void *, y luego debe encajonar y desempaquetar (o subir y bajar) las variables para obtener el mismo comportamiento. En Objective-C simplemente asigna, lo que elimina el ruido generado por los operadores de casting y las operaciones de boxeo. Luego puede preguntar “respondsToSelector:” o “clase” a cada objeto, para conocer la identidad y las operaciones que puede realizar con ellos, en tiempo de ejecución. En Objective-C, la reflexión es un ciudadano de primera clase.

Crédito: Aprovechar al máximo las características dinámicas de Objective-C