Estou bastante confiante de programação em Objective-C e C ++, mas acho que o Objective-C é um pouco mais fácil de usar e mais flexível e dinâmico por natureza.
Quais seriam os prós e os contras ao usar o C ++ em vez do Obj-C para escrever jogos no iOS? Ou melhor, existem problemas conhecidos com o uso de Obj-C em comparação com C ++?
Por exemplo, suspeito que possa haver problemas de desempenho com o Obj-C em comparação com o código escrito em C / C ++.
c++
ios
performance
objective-c
Martin Wickman
fonte
fonte
Respostas:
Uma grande vantagem do C ++: se você decidir fazer isso, será relativamente fácil portar para Android / PC / DS / PSP / (inserir a plataforma de escolha aqui). O Objective-C o prenderá no iOS até você decidir reescrever o jogo inteiro.
fonte
Não há prós ou contras reais aqui, pelo menos nenhum que deva forçar um programador a se sentir confortável em um idioma a usar o outro.
O desempenho não deve ser um problema. É improvável que você escreva qualquer trabalho pesado com muitas mensagens nos loops internos se você for um bom programador de Obj-C, o que significa que você realmente estará escrevendo esses loops internos em C. Se você não é baixo programador de nível, as chances são de que o trabalho pesado será feito por quaisquer bibliotecas que você escolher adiar isso também, e você estará à mercê do que eles escolherem fazer.
Portabilidade é um problema real, se você se importa. Se não, então meh. Ser multiplataforma não é o fim, tudo é tudo. Ser bem-sucedido em um primeiro seria bom :) Você sempre pode portar mais tarde. Se você não planeja cuidadosamente ser multiplataforma desde o primeiro dia, apenas estar no mesmo idioma não o levará muito longe: existem muitas outras diferenças reais entre plataformas que precisam ser abordadas.
Terminar o projeto é mais importante do que se preocupar com a tecnologia, e se você é mais produtivo no Obj-C, permaneça no Obj-C.
Minha preferência? Eu sou um cara de C ++. I como Obj-C bem, mas estou feliz em C ++, e eu fazer write código de plataforma cruzada.
fonte
Não há problemas de desempenho com o Obj-C sobre C ++. Ambos são código compilado, e lembre-se de que Obj-C é um superconjunto de C e Obj-C ++ é um superconjunto de C ++, o que é ótimo quando você deseja misturar Obj-C e C ++ no mesmo programa (fácil de executar e XCode tem um bom suporte para o lado C ++). Todas as combinações de idiomas são compatíveis com o OpenGL; portanto, qualquer trabalho gráfico sério é bom e o suporte à biblioteca é aceitável para a Apple, independentemente do idioma.
Dito isto, qual é o objetivo do seu jogo?
Se você está escrevendo exclusivamente para o IOS, não se preocupe e escreva em qualquer idioma ou combinação em que se sinta mais confortável. Para mim, esse é o Obj-C ++ com STL, já que essa é a minha parte favorita do C ++. Como eu prefiro o Obj-C um pouco do que o C ++, costumo usar essa opção.
Se você estiver escrevendo com o objetivo de portar para outro dispositivo, escreva em C ++ com uma camada de conversão para o Obj-C para lidar com qualquer material específico do dispositivo (gráficos, entrada, câmera, ...), onde as chamadas são feitas para pontos de entrada na sua aplicação.
Se você é mais puro e deseja apenas um idioma, escreva no Obj-C.
Outros já falaram sobre outras bibliotecas (física e outras). Não há absolutamente nenhum problema em acessar qualquer uma dessas opções de idioma que você está falando (Obj-C, C ++ ou Obj-C ++). Você também não terá problemas de desempenho com essas bibliotecas em nenhum idioma.
Uma ressalva: há uma chamada indireta de ponteiro com a passagem de mensagens. Não tenho certeza de quanto você pode interpretar isso como sobrecarga, pois tenho certeza de que é exatamente o mesmo que uma chamada de método C ++ herdada. Alguém pode esclarecer isso?
Espero que ajude,
Lee.
fonte
Vector3D
turma em Obj-C? Meu pressentimento me diz que isso pode levar a um desempenho ruim.Depende exatamente do que você está programando. Se for principalmente lógica de jogo usando mecanismos de física e gráficos existentes, posso dizer com segurança que não vejo motivo para usar c ou c ++ se você estiver mais à vontade com o obj-c. Se você estiver lançando classes de renderização ou física, provavelmente escreveria aquelas usando c ou c ++. Cocos2d - que é uma maravilhosa e uma das bibliotecas de jogos iOS mais populares está escrita em obj-c.
Confira esta leitura - a parte relevante é "divisão do trabalho", pode ajudá-lo a decidir quando codificar em um idioma de nível superior e quando usar o nível inferior: Código gerenciado em jogos
Embora a sobrecarga da objetiva-c não deva estar perto de C # e nem seja gerenciada (no iOS), acredito que a lógica ainda se aplica, e os dispositivos com iOS também não estão tão fortes quanto o PC que interpretaria o MSIL :)
fonte
Este estudo diz que, para realmente obter o desempenho em um jogo intensivo de CPU, você precisa usar o C. O artigo vinculado está completo com um projeto XCode que você pode executar.
Acredito que a conclusão é: use o Objective-C onde você deve interagir com as funções do iPhone (afinal, colocar trampolins em todos os lugares não pode ser bom para ninguém ), mas quando se trata de loops, coisas como classes de objetos vetoriais ou intensivas acesso à matriz, use as matrizes C ++ STL ou C para obter um bom desempenho.
Quero dizer, seria totalmente bobo de se ver
position = [[Vector3 alloc] init] ;
. Você está apenas pedindo uma ocorrência de desempenho se usar referências contadas em objetos básicos como um vetor de posição.Veja também essas comparações,
fonte