La mejor manera de incorporar C ++ en el proyecto Objective-C

7

Para un próximo proyecto de XCode iOS, estoy planeando escribir mis vistas y ver los controladores en Objective-C. Mi modelo me será proporcionado en C ++.

Soy consciente de 2 formas de usar C ++ en un proyecto objetivo-c. Se describen a continuación. ¿Cuáles son los pros y los contras de cada método? ¿Hay alguna otra forma recomendada y cuáles son sus pros y sus contras?

-En los archivos de encabezado de C ++, use la declaración "C" externa como se describe en Wikipedia .

: Envolver C ++ con un Objective-C ++ como se describe en Rob Napier .

    
pregunta Ben Boral 23.08.2012 - 07:32

2 respuestas

7

Sus vistas y controladores de vista deberán ser Objective-C, debido a los marcos. Esto se da mucho. La pregunta entonces es dónde colocar el puente entre su código C ++ y su código Objective-C.

En primer lugar, recomendaría no envolver el código C ++ en funciones C con una convención de enlazador extern C {} . Luego te has planteado dos problemas: cómo manejar las clases y tipos de C ++ desde dentro de C y cómo usar la interfaz de C estructurada desde los objetos de Objective-C. Ambos de estos problemas son superables, pero es posible que no tenga que presentarlos.

Tres enfoques parecen posibles:

  • escriba la lógica y el comportamiento de su aplicación en C ++, donde algunas clases tienen campos miembros que son tipos Objective-C para que pueda interactuar con los marcos. Es probable que este enfoque se tope con problemas de "desajuste de impedancia" entre los marcos (que tienen una política de "no nos llame, lo llamaremos") y su propio código que intenta controlar el comportamiento de la aplicación desde el exterior. El ámbito del marco.

  • en sus controladores de vista, mantenga las referencias a los tipos de C ++ como variables de instancia. Las clases del controlador de vista serán archivos Objective-C ++.

  • escriba el adaptador o las clases de fachada en Objective-C ++ que proporcionan una API de Objective-C y administran internamente los tipos de C ++. Sus controladores de vista acceden al modelo exclusivamente a través de esta capa.

De estos enfoques, preferiría el tercero. Se separan las responsabilidades de "administrar el modelo" (en el código C ++), "mostrar el contenido del modelo" (en las clases de controlador de vista de ObjC) y "conectar C ++ con ObjC" (en la capa del adaptador). Conocerá a muchos desarrolladores que conocen ObjC pero no a C ++ y viceversa. Este enfoque hace que sea más fácil para los desarrolladores contribuir a su base de código, ya sea que terminen trabajando con usted o simplemente tratando de ayudarlo en la web.

    
respondido por el user4051 23.08.2012 - 09:38
1

No sé mucho acerca de Objective-C, pero el enfoque de extern "C" solo funcionará si sus archivos de cabecera de C ++ no contienen clases de C ++, solo estructuras y funciones de estilo C. Si su modelo está escrito en C ++, supongo que este no será el caso, así que creo que tendrá que probar el segundo camino.

extern "C" está destinado a usar el código C en C ++, no al revés.

    
respondido por el Doc Brown 23.08.2012 - 08:03

Lea otras preguntas en las etiquetas