¿Es posible programar iPhone en C ++?


124

Estoy totalmente a favor de la diversidad del lenguaje, pero el Objetivo C es una locura. Así que tengo curiosidad: ¿es posible codificar aplicaciones de iPhone con C ++ mientras se usa la API de Cocoa, etc.?

Respuestas:


57

Respuesta corta, sí, más o menos. Puede usar Objective-C ++, que puede leer en Apple Developer Connection.

Si ya conoces C ++, aprender Objective-C sería bastante simple si decidieras probarlo. También hay más información sobre ese tema en el ADC.


1
¿Me puede recomendar un sitio web o libro dirigido a programadores experimentados de C ++ para aprender Objective-C? Logré mezclar algunas aplicaciones de prueba juntas, pero encuentro la sintaxis un poco al revés y estoy seguro de que estoy haciendo cosas que conducen a pérdidas de memoria, etc. simplemente por falta de conocimiento de Objective-C
Lea Hayes

3
@LeaHayes Un libro gratuito llamado "De C ++ a Objective-C". Supone que conoce C ++ y luego le dice cómo se hacen las cosas de manera diferente en Objective-C. pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf (esta es una traducción al inglés del francés original)
olafure

61

Aunque Objective-C realmente parece estar "loco" inicialmente, le animo a que se quede con él. Una vez que tienes un momento "a-ha", de repente todo comienza a tener sentido. Para mí, me llevó cerca de 2 semanas concentrarme en Objective-C para comprender realmente los marcos de Cocoa, el lenguaje y cómo encaja todo. Pero una vez que realmente lo "entendí", fue muy, muy emocionante.

Suena cliché, pero es verdad. Soportar hasta el fin.

Por supuesto, si trae bibliotecas C ++ o código C ++ existente, puede usar esos módulos con Objective-C / Objective-C ++.


42

Yo uso Objective-C para juntar la interfaz de usuario.
Pero las entrañas del código todavía están escritas en C ++.

Ese es el objetivo principal de Objective-C, la interfaz de usuario y el manejo de los eventos.
Y funciona muy bien para ese propósito.

Sin embargo, todavía me gusta C ++ como el backend para el código (pero eso es principalmente porque me gusta C ++). También podrías usar Objective-C para el backend de la aplicación.


9
@Spanky: ¿Cómo hago exactamente qué? Puede escribir C normal en el archivo * .m. Puede escribir C ++ normal en archivos * .mm (Objective-C ++). Dentro de los archivos Objective-C (++) puede usar archivos normales #include <XXX>como C / C ++.
Martin York

28

En primer lugar, decir que Objective-C es "demente" es chistoso. Tengo el libro Bjarne Stroustrup C ++ sentado a mi lado, con 1020 páginas. El PDF de Apple en Objective-C es 141.

Si quieres usar UIKit, será muy, muy difícil que hagas algo en C ++. Cualquier aplicación de iPhone seria que se ajuste a la interfaz de usuario de Apple necesitará que sus partes de la interfaz de usuario se escriban en Objective-C. Solo si está escribiendo un juego OpenGL puede apegarse casi por completo a C / C ++.


30
¿Desde cuándo era menos buena documentación? "El lenguaje de programación C ++" es muy completo y también documenta el STL.
Timmmm

2
@Timmmm: Desde que K&R hizo ese punto en los temas principales de su libro. Objective-C es un lenguaje mucho más pequeño que C ++, con muchos de los mismos beneficios (y algunos más propios). Todo es compensación, por supuesto. Pero la documentación mínima hace que Obj-C sea bastante fácil para que las personas con experiencia en C (o C ++) se pongan al día.
Ben Zotto

62
Lo siento, pero ObjC está loco. La insistencia en una forma completamente diferente de declarar funciones, el uso de corchetes. Es diferente sin ningún beneficio. Podrían haber redactado el mismo lenguaje efectivo sin la sintaxis ridícula. Eligieron no hacerlo. Por lo tanto, es una locura.
Ruibarbo

13
@ Ruibarbo: aunque me gusta Objective-C, tengo que estar de acuerdo en que su sintaxis extraña no sirve para nada.
Raphael

@ Ruibarbo, sí, recuerda que Apple es la compañía que se le ocurrió esa locura, y Apple es diferente con el único propósito de ser diferente.
SeanRamey

14

Al tener cierta experiencia en esto, puede usar el código C ++ para su código "central", pero debe usar el objetivo C para cualquier cosa específica del iPhone.

No intentes forzar a Objective-C a actuar como C ++. Al principio le parecerá que esto es posible, pero el código resultante realmente no funcionará bien con Cocoa, y se sentirá muy confundido sobre lo que está sucediendo. Tómese el tiempo para aprender correctamente, sin ningún tipo de C ++, cómo construir GUI y aplicaciones de iPhone, luego enlace en su base de C ++.


3

Debe usar el Objetivo C para interactuar con la API de Cocoa, por lo que no hay otra opción. Por supuesto, puede usar tanto C ++ como desee detrás de escena (Objective C ++ lo hace fácil).

Es un lenguaje loco, pero también es ... divertido de usar una vez que estás un poco acostumbrado. :-)



2

Estoy en el proceso de portar una aplicación de Android de computación intensiva escrita en Java a iOS6. Estoy haciendo esto al portar las partes que no son de UI de Java a C ++, escribir las partes de UI (mínimas) en Obj-C y envolver las primeras en una interfaz C (pequeña) usando la técnica estándar de C / C ++, de modo que se puede acceder desde Obj-C, que después de todo es un superconjunto de C.

Esto ha sido efectivo hasta ahora, y no he encontrado ningún problema. Parece ser un enfoque legítimo, ya que Xcode le permite crear clases C ++, así como clases Obj-C, y parte del código de muestra oficial hace las cosas de esta manera. No he tenido que salir de ninguna interfaz oficialmente compatible para hacer esto.

Parece que no habría mucho que ganar escribiendo mi código de interfaz de usuario restante en C ++, incluso si fuera posible, en vista de la ayuda que le brindó el creador de interfaces en Xcode, por lo que mi respuesta sería que puede usar C ++ para casi toda su aplicación, o la cantidad que considere apropiada / conveniente.


2

Sí, pero pensar que puede programar todo tipo de programa en un solo idioma es una idea defectuosa a menos que esté escribiendo programas muy simples. El objetivo C es para Cocoa como C # para .NET. Use la herramienta adecuada para el trabajo correcto. Intentar hacer que C ++ interactúe con Cocoa escribiendo código de puente e intentar hacer que el código C ++ se comporte de acuerdo con los requisitos de Cocoa no es una buena idea ni esperar que C ++ El rendimiento del objetivo C es. Debe intentar diseñar el diseño y la arquitectura de la aplicación teniendo en cuenta las habilidades existentes y determinar qué parte debe escribirse en qué idioma y luego construir en consecuencia.


0

Actualmente estoy escribiendo un marco Objective-C ++ llamado Objective-X, que hace posible la PROGRAMACIÓN PURA C ++ iPHONE. Puedes hacer así:

#import "ObjectiveX.h"

void GUIApplicationMain() {    
    GUIAlert Alert;
    GUILabel Label;
    GUIScreen MainScreen;

    Alert.set_text(@"Just a lovely alert box!");
    Alert.set_title(@"Hello!");
    Alert.set_button(@"Okay");
    Alert.show();

    Label.set_text(@"Ciao!");
    Label.set_position(100, 200, 120, 40);

    MainScreen.init();
    MainScreen.addGUIControl(Label.init());    
}

y compilarlo usando las opciones de línea de comando apropiadas de GCC. Ya he compilado esta aplicación helloworld y w0rkX0rz es un encanto. ;-) Pronto estará disponible en GoogleCode. Busque Objective-X o visite http://infotronix.orgfree.com/objectivex aprox. ¡una semana después!

URL actualizada (pero aparentemente inactiva): http://code.google.com/p/objectivex/


44
¿Por qué no esperar con la publicación hasta que esté realmente disponible?
Georg Fritzsche el

8
Ambos enlaces son 404 ahora
Zhao Xiang

1
Según SourceForge: "A partir del 2014-01-24, este proyecto ya no está en desarrollo activo". sourceforge.net/projects/objectivex
JAL

0

Puede ser un poco fuera de tema, pero de todos modos. Puede programar c ++ directamente en dispositivos iOS. Echa un vistazo a la aplicación CppCode ios - http://cppcode.info . Creo que ayuda aprender C y C ++ y Objective-C más adelante.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.