¿Cuáles son algunas peculiaridades / sorpresas con el uso de archivos .mm en Objective-C?
-
05-07-2019 - |
Pregunta
Quiero usar algunas colecciones C ++ STL en mi aplicación de iPhone Objective-C. Aparentemente, esto es posible dando a los archivos la extensión ".mm" . ¿Cuáles son algunas de las peculiaridades / sorpresas asociadas con esto?
Quiero usar los contenedores básicos con los que estoy familiarizado (vector, queue, set, ...)
¡Salud!
Solución
Consulte Uso de C ++ con Objective-C para obtener una lista detallada de lo que puedes y no puedes hacer. Puede hacer la mayoría de las cosas que esperaría. Simplemente no puede hacer cosas como tener una clase de C ++ heredada de una clase de Objective-C o viceversa, no puede mezclar excepciones de C ++ con excepciones de Objective-C, y C ++ introduce varias palabras clave nuevas que no están presentes en Objective-C.
Otros consejos
La peculiaridad principal de Objective-C ++ es que si no pasa -fobjc-call-cxx-cdtors a g ++, no llamará al constructor y destructor de las variables de instancia de C ++ de los objetos ObjC. Así que recuerde activar esa opción y debería ser bueno.
Los archivos se compilarán con el compilador Objective-C ++, por lo que las cosas se comportarán más como g ++ que gcc, pero como eso es lo que quieres, probablemente no sea una sorpresa. Desde el lado de Objective-C, no tengo conocimiento de ningún problema, y ??he trabajado en varios proyectos grandes que hicieron un uso significativo de Objective-C ++. Solo tenga en cuenta que las palabras reservadas de Objective-C también están reservadas en Objective-C ++, por lo que ocasionalmente puede tener problemas con las bibliotecas de C ++ de terceros (por ejemplo, si usan '' id '' como parámetro en una interfaz pública) .
Te sorprendería lo bien que funciona. Realmente no he tenido ningún problema al mezclar Obj-C y C ++ en un archivo .mm.