util - iphone xr
¿Objective-C,.m/.mm diferencia de rendimiento? (2)
Tiendo a usar la extensión .mm de forma predeterminada al crear nuevas clases para poder usar ObjC ++ más adelante si lo requiero.
¿Hay alguna desventaja para hacer esto? ¿Cuándo preferirías .m
? ¿ .m
en un ejecutable más rápido (ya que C es generalmente más rápido que C ++)?
La principal desventaja de usar .mm
sobre .m
para Objective-C "normal" es que los tiempos de compilación son significativamente más altos para Objective-C ++. Esto se debe a que el compilador de C ++ lleva más tiempo que el compilador de C. Con Xcode 3.2 y superior, el código Objective-C puede usar la cadena de herramientas de interfaz Clang para acelerar significativamente los tiempos de compilación de Objective-C / C. Dado que Clang aún no admite Objective-C ++ / C ++, esto amplía aún más la brecha en la compilación de tiempos entre los dos.
Una mejor estrategia es usar .m
por defecto. Si necesita usar Objective-C ++ más adelante en el desarrollo, no hay ningún problema en cambiar el nombre del archivo para usar una extensión .mm
. Si lo hace desde XCode, el proyecto se actualizará automáticamente para usar el archivo recién nombrado.
Por supuesto, todas las advertencias estándar se aplican una vez que intenta comparar el rendimiento de Objective-C ++ frente al de Objective-C en tiempo de ejecución. Dado que Objective-C ++ es un superconjunto de C ++, mientras que Objective-C es un superconjunto de C, se trata de dos idiomas diferentes, cada uno con compensaciones de rendimiento en tiempo de ejecución. Dado que está usando Objective-X, es probable que esté escribiendo una aplicación de nivel de usuario (no una aplicación de nivel de sistema) y la diferencia en el rendimiento entre C y C ++ probablemente estará completamente determinada por sus habilidades para codificar algoritmos eficientes en cada idioma Si eres un desarrollador de C ++, es probable que codifiques mejor que en C y viceversa. Entonces, como siempre, use la herramienta adecuada para el trabajo.
Como referencia, también puede interesarle esta respuesta: C vs C ++ (Objective-C vs Objective-C ++) para iPhone
ACTUALIZACIÓN 17 de febrero de 2012 A partir de Xcode 4.0 (con LLVM 3.0), Clang ha apoyado Objective-C ++. Incluso el soporte de C ++ 11 es bastante fuerte ahora.
Si solo utiliza las funciones de C, los archivos .mm deben generar un código que tenga un rendimiento muy similar al de .m
Tampoco hay inconveniente en cambiar el nombre de un archivo de .m a .mm más tarde cuando desee las funciones de C ++