¿Cuáles son las diferencias entre Objective-C y C? Por qué Apple elige el primero
Excepto que ambos pueden usar el lenguaje C, no tienen nada de especial. Además, no fue Apple quien eligió OC, sino NeXT quien eligió OC (el predecesor de Mac OSX fue el sistema NeXTSTEP de NeXT).
OC está basado en el lenguaje C y añade la función de mensajes en el lenguaje Smalltalk. OC es un verdadero superconjunto de C (C no lo es), y la parte del lenguaje C de OC sigue la especificación del lenguaje C. Y en cierto sentido, OC está más orientado a objetos que C, pero su rendimiento es muy bajo. Y OC2.0 agrega funciones gramaticales como lambda, recuento automático de referencias y boxeo/unboxing automático.
C no es un superconjunto de C como la mayoría de la gente piensa. C y C son completamente dos conjuntos de especificaciones. Además de la programación orientada a objetos, C también tiene funciones de metaprogramación basadas en plantillas relativamente completas. Por supuesto, C también proporciona una sintaxis relativamente detallada como lambda (pero la implementación es diferente a la de OC).
En cuanto a por qué NeXTSTEP eligió OC como lenguaje de desarrollo en primer lugar, se puede decir que fue simplemente una elección. OC es obviamente más fácil de usar que C, y en ese momento, no había ninguna ventaja obvia entre C y OC (el OC relativamente simple maduró naturalmente más rápido que C. C apareció oficialmente en 1983 y no se estandarizó hasta 1998, y en 2011 es básicamente completo).
Además, debo decir que en realidad existe Objective-C, lo que significa que las funciones agregadas por OC en C se agregan a C, y se agregan algunas funciones adecuadas para C (como C estructura en OC Los objetos OC no se pueden usar en OC, pero se pueden usar en OC). Las clases OC y C se pueden mezclar en OC y puede utilizar las potentes funciones de C mientras utiliza la interfaz OC.