Confío bastante en la programación en Objective-C y C ++, pero creo que Objective-C es algo más fácil de usar y más flexible y dinámico por naturaleza.
¿Cuáles serían los pros y los contras al usar C ++ en lugar de Obj-C para escribir juegos en iOS? O más bien, ¿hay algún problema conocido con el uso de Obj-C en comparación con C ++?
Por ejemplo, sospecho que podría haber problemas de rendimiento con Obj-C en comparación con el código escrito en C / C ++.
c++
ios
performance
objective-c
Martin Wickman
fuente
fuente
Respuestas:
Una gran ventaja para C ++: si decide hacerlo, será relativamente fácil portar a Android / PC / DS / PSP / (inserte la plataforma de elección aquí). Objective-C te encerrará en iOS hasta que decidas reescribir todo el juego.
fuente
Aquí no hay verdaderos pros o contras, al menos ninguno que deba obligar a un programador cómodo en un idioma a tener que usar el otro.
El rendimiento no debería ser un problema. Es poco probable que escriba un trabajo pesado con muchos mensajes en los bucles internos si es un buen programador de Obj-C, lo que significa que realmente escribirá esos bucles internos en C. Si no es bajo programador de nivel, lo más probable es que el trabajo pesado lo realicen las bibliotecas que elija para diferir eso también, y estará a merced de lo que sea que hayan elegido hacer.
La portabilidad es un problema real, si te importa. Si no, entonces meh. Ser multiplataforma no es el final, todo será todo. Ser exitoso en uno primero sería bueno :) Siempre puedes portar más tarde. Si no está planeando cuidadosamente ser multiplataforma desde el día 1 de todos modos, solo estar en el mismo idioma no lo llevará muy lejos: hay muchas más diferencias reales entre las plataformas que deben abordarse.
Terminar el proyecto es más importante que preocuparse por la tecnología, y si eres más productivo en Obj-C, entonces quédate en Obj-C.
¿Mi preferencia? Soy un chico de C ++. Me gusta Obj-C muy bien, pero estoy feliz en C ++, y yo hago escribir código de plataforma cruzada.
fuente
No hay problemas de rendimiento con Obj-C sobre C ++. Ambos son código compilado, y recuerden que Obj-C es un superconjunto de C, y Obj-C ++ es un superconjunto de C ++, lo cual es excelente cuando desea mezclar Obj-C y C ++ en el mismo programa (fácil de hacer y XCode tiene buen soporte para el lado de C ++). Todas las combinaciones de idiomas admiten OpenGL, por lo que cualquier trabajo gráfico serio está bien y el soporte de la biblioteca está bien con Apple, independientemente del idioma.
Dicho esto, ¿cuál es el propósito de tu juego?
Si solo escribe para iOS, no se preocupe y escriba en cualquier idioma o combinación con la que se sienta más cómodo. Para mí, esto es Obj-C ++ con STL, ya que esa es mi parte favorita de C ++. Como prefiero Obj-C ligeramente sobre C ++, tiendo a usar esta opción.
Si está escribiendo con el objetivo de portar a otro dispositivo, escriba en C ++ con una capa de traducción a Obj-C para tratar cualquier cosa específica del dispositivo (gráficos, entrada, cámara, ...), donde se realizan las llamadas a puntos de entrada en su solicitud.
Si eres el más puro y quieres un solo idioma, escribe en Obj-C.
Otros han hablado de otras bibliotecas (física y tal). No hay absolutamente ningún problema para acceder a nada de eso desde cualquiera de las opciones de idioma de las que está hablando (Obj-C, C ++ u Obj-C ++). Tampoco tendrá problemas de rendimiento con esas bibliotecas en ningún idioma.
Una advertencia: hay una llamada indirecta de puntero con el mensaje pasando No estoy seguro de cuánto puede interpretar eso como gastos generales, ya que estoy bastante seguro de que es exactamente lo mismo que una llamada al método C ++ heredado. ¿Alguien puede aclarar esto?
Espero que ayude,
Sotavento.
fuente
Vector3D
clase en Obj-C? Mi instinto me dice que eso podría conducir a un mal desempeño.Depende exactamente de lo que esté programando. Si se trata principalmente de la lógica del juego usando motores físicos y gráficos existentes, puedo decir con seguridad que no veo ninguna razón para usar c o c ++ si te sientes más cómodo con obj-c. Si va a implementar clases de representación o de física, probablemente las escriba con c o c ++. Cocos2d, que es una maravillosa y una de las bibliotecas de juegos iOS más populares, está escrita en obj-c.
Echa un vistazo a esta lectura: la parte relevante es "división del trabajo", podría ayudarte a decidir cuándo codificar en un lenguaje de nivel superior y cuándo usar el nivel inferior: código administrado en juegos
Si bien la sobrecarga del objetivo-c no debería estar cerca de C # y ni siquiera se administra (en iOS), creo que la lógica aún se aplica, y los dispositivos que ejecutan iOS tampoco son tan fuertes como la PC que interpretaría MSIL :)
fuente
Este estudio dice que para obtener realmente el rendimiento en un juego intensivo de CPU, debe usar C. El artículo vinculado se completa con un proyecto XCode que puede ejecutar.
Creo que la conclusión es: use Objective-C donde debe interactuar con las funciones del iPhone (después de todo, poner trampolines en todas partes no puede ser bueno para nadie ), pero cuando se trata de bucles, cosas como clases de objetos vectoriales o intensivos acceso a la matriz, quédese con las matrices C ++ STL o C para obtener un buen rendimiento.
Quiero decir que sería totalmente tonto verlo
position = [[Vector3 alloc] init] ;
. Solo está pidiendo un éxito de rendimiento si usa recuentos de referencias en objetos básicos como un vector de posición.Ver también estas comparaciones,
fuente