2009-11-14 15 views
15

Me gustaría crear una biblioteca portátil para iPhone, que también podría usarse para otras plataformas.C vs C++ (Objective-C vs Objective-C++) para iPhone

Mi pregunta es el barbecho:

¿Alguien sabe cuál es la mejor para ser utilizado en el iPhone: Objective-C o C++ Objetivo-? ¿Funciona con C++ de la misma manera que Objective-C con C o no?

Razones: Objective-C es un superconjunto de C, pero Objective-C++ is not un superconjunto de C++.

¡Gracias de antemano!

ACTUALIZACIÓN: ¿Qué pasa con el uso de memoria, la velocidad en la misma implementación de un caso de uso?

ACTUALIZACIÓN1: Si alguien puede proporcionar más información, será bienvenido.

+4

Probablemente no deberías poner nada en el entorno de resaltado de sintaxis a menos que realmente sea código. –

+6

Objetivo-C++ * es * un superconjunto de C++. –

+0

Barry Wark, por favor dame el enlace donde puedo encontrarlo. Es una mezcla entre C++ y objc. – mxg

Respuesta

11

No son realmente idiomas diferentes. Objective-C++ es solo Objective-C con soporte ligeramente limitado para incluir código C++. Objective-C es el dialecto estándar, pero si necesita trabajar con C++, no hay razón para no usarlo. AFAIK, la mayor diferencia práctica (aparte de permitir el uso de diferentes bibliotecas) es que Objective-C++ parece compilar un poco más lento. Solo asegúrate de leerlo primero si decides ir por esa ruta, porque la fusión de C++ y Objective-C no es 100% perfecta.

6

Si va a utilizar esta biblioteca en plataformas que no sean iPhone y Mac OS, debe usar C++. Si planeas solo portarlo a Mac OS, entonces usa Objective-C. Objective-C++ es solo una forma de integrar el código existente de C++ en proyectos de Objective-C. Por lo tanto, no escribirías una biblioteca en él. Sin embargo, puede usar Objective-C++ para usar esta biblioteca desde un proyecto de iPhone o Mac.

18

Si está escribiendo una biblioteca portátil, y no necesita funciones de lenguaje específicas, ¿por qué no escribirla en línea recta? Se puede llamar fácilmente desde C++, C, Objective-C y muchos, muchos otros lenguajes.

Si requiere características específicas del lenguaje que no están disponibles en C, usted debe decirnos lo que son para que pueda obtener un mejor asesoramiento =)

1

Ir para C o C++ - no veo ninguna razón para recomendando uno sobre el otro sin saber más acerca de sus objetivos.

En términos de uso de memoria, C++ y C exigen una codificación más disciplinada. En términos de velocidad, C y C++ en casi todos los casos serán más rápidos que cualquier solución ObjC/ObjC++. Con frecuencia mezclo mis aplicaciones de Objective C con C y C++ y siempre me complacieron los resultados. Como Jonathan afirmó correctamente, ObjectiveC++ es principalmente un puente para usar códigos/bibliotecas C++ dentro de su aplicación Objective C.

Puede usar libremente objetos C++ desde Objective C++. Sin embargo, NO puede usar objetos Objective C/C++ dentro de C++. Entonces es un camino de un solo sentido. Para superar cualquier limitación impuesta por esta restricción, simplemente ajuste sus objetos C++ con las clases Objective C++ cuando sea necesario.

+0

Sé todo esto. Como ya sabrá, objc es un superconjunto de C, pero objC++ no es un superconjunto de C++. Entonces, significa que dependiendo de la implementación de objC++ pueden aparecer algunas sorpresas. Eso es lo que estoy preguntando. ¿Hay alguna sorpresa? – mxg

+0

Nunca tropecé con ninguna advertencia oculta. – Till

16

Creo que su información es incorrecta. Objective-C++ es un superconjunto de C++. Cualquier C++ es legal Objective-C++. Además, puede mezclar código Objective-C y C++ en un archivo Objective-C++ (generalmente .mm) y (con algunas restricciones) mezclar variables de instancia de clase C y Objective-C dentro de una clase Objective-C++.Objective-C++ es particularmente útil para la interfaz entre Objective-C y una biblioteca de C++. Escriba su biblioteca multiplataforma en C++. Luego puede llamarlo desde Objective-C++ dentro de una aplicación. Vuelva a leer el Objective-C++ section de la guía de lenguaje Objective-C para obtener más información.

La desventaja principal de usar Objective-C++ es el aumento de los tiempos de compilación (Objective-C++ es incluso peor que C++ y el compilador Clang LLVM aún no maneja Objective-C++). No hay diferencia de rendimiento entre Objective-C y Objective-C++ más allá de cualquier diferencia en el código que se llame (por ejemplo, si eres un mejor desarrollador de C++, tu C++ probablemente será más eficiente que tu biblioteca de C y viceversa).

+0

Por error voté, pero Objective-C++ es un superconjunto de C++. Por favor, lea más cuidado. Aquí está la documentación del enlace que me diste. "El compilador Objective-C de Apple le permite mezclar libremente código C++ y Objective-C en el mismo archivo fuente. Este híbrido de lenguaje Objective-C/C++ se llama Objective-C++." – mxg

+6

Como dije en mi publicación, creo que cualquier C++ válido es válido Objective-C++ pero no todo válido Objective-C++ es C++ válido. Por lo tanto, Objective-C++ es un superconjunto (estricto) de C++, así como Objective-C un superconjunto (estricto) de C. Creo que está malinterpretando el texto que cita. –

+0

Vea esta respuesta: http://stackoverflow.com/questions/525609/use-c-with-cocoa-instead-of-objective-c/529017 # 529017 –

3

La verdad es que puedes usar C o C++ en Xcode. La razón para usar Objective C para Cocoa y Cocoa Touch (iphone) es su facilidad de uso y la forma en que maneja muchos de los problemas de memoria con los que se toparía. Objective C y Xcode funcionan como un sueño. También recomendaría visitar http://www.kevincallahan.org/software/accessorizer.html Accessorizer es increíble y reduce el tiempo de desarrollo a nada.

Habiendo dicho que no veo ningún problema al escribir funciones/métodos en C o C++ y usarlos dentro de una parte de su proyecto XCode. Simplemente no espere usar Objective C para jugar tan bien en otras plataformas. Los IDE de desarrollo de Apple y Windows son diferentes y Microsoft tiene un buen hábito para no hacer que las cosas sean compatibles con otros entornos (no solo Apple).

Me alegra escuchar que alguien intente reutilizar su código para otros proyectos:) Demasiadas personas olvidan crear sus propias bibliotecas en estos días y no tengo la menor idea de por qué.

Espero que esto ayude. Cheers, Matthew

3

Aquí está su advertencia: Gaste cien al convertirse en desarrollador y ejecute xcode el IDE con el que trabajará en la Mac: esta sería la mejor manera de decidir, ya que es evidente que no entiendo completamente cómo funciona esta plataforma.

No seas grosero con todos los que intentan ayudarte. Esta comunidad se basa en el respeto. La gente de aquí realmente ayuda y hay pocos lugares como este en la red.

+0

;) Matthew, mi error! – mxg