É possível programar o iPhone em C ++


124

Sou a favor da diversidade de idiomas, mas o Objetivo C é insano. Então, estou curioso: é possível codificar aplicativos do iPhone com C ++ enquanto estiver usando a API do cacau, etc.?

Respostas:


57

Resposta curta, sim, mais ou menos. Você pode usar o Objective-C ++, sobre o qual você pode ler no Apple Developer Connection.

Se você já conhece o C ++, aprender Objective-C seria bem simples, se você decidisse tentar. Mais informações sobre esse tópico estão no ADC também.


1
você pode recomendar um site ou livro destinado a programadores experientes em C ++ para aprender o Objective-C? Eu consegui esmagar um teste poucos aplicativos juntos, mas acho que a sintaxe um pouco para trás e tenho a certeza que eu estou fazendo coisas que levam a vazamentos de memória etc apenas por falta de conhecimento do Objective-C
Lea Hayes

3
@LeaHayes Um livro gratuito chamado "From C ++ to Objective-C". Supõe que você conhece C ++ e depois informa como as coisas são feitas de maneira diferente no Objective-C. pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf (esta é uma tradução em inglês do francês original)
olafure 31/03

61

Embora o Objective-C pareça realmente "insano" inicialmente, encorajo você a continuar com ele. Depois de ter um momento "a-ha", de repente tudo começa a fazer sentido. Para mim, foram necessárias cerca de duas semanas de concentração objetiva-C para realmente entender as estruturas de cacau, a linguagem e como tudo se encaixa. Mas uma vez que eu realmente "entendi", foi muito, muito emocionante.

Parece clichê, mas é verdade. Aguenta.

Obviamente, se você estiver trazendo bibliotecas C ++ ou código C ++ existente, poderá usar esses módulos com Objective-C / Objective-C ++.


42

Eu uso o Objective-C para dar um tapa na interface do usuário.
Mas a coragem do código ainda está escrita em C ++.

Esse é o principal objetivo do Objective-C, a interface da interface do usuário e a manipulação dos eventos.
E funciona muito bem para esse fim.

No entanto, ainda gosto de C ++ como back-end para o código (mas isso é principalmente porque gosto de C ++). Você poderia facilmente usar o Objective-C para o back-end do aplicativo.


9
@ Spanky: Como faço o que exatamente. Você pode escrever C normal no arquivo * .m. Você pode escrever C ++ normal em arquivos * .mm (Objective-C ++). Dentro dos arquivos Objective-C (++), você pode usar o normal, #include <XXX>como os arquivos C / C ++.
Martin York

28

Primeiro, dizer que Objective-C é "insano" é engraçado - eu tenho o livro Bjarne Stroustrup C ++ ao meu lado, com 1020 páginas. O PDF da Apple no Objective-C é 141.

Se você deseja usar o UIKit, será muito, muito difícil fazer algo em C ++. Qualquer aplicativo sério para iPhone que esteja em conformidade com a interface do usuário da Apple precisará que suas partes da interface do usuário sejam escritas no Objective-C. Somente se você estiver escrevendo um jogo OpenGL, poderá se ater quase inteiramente ao C / C ++.


30
Desde quando menos documentação era uma coisa boa? "A linguagem de programação C ++" é muito completa e também documenta o STL.
Timmm

2
@ Timmmm: Desde que a K&R fez esse ponto nas questões de frente de seu livro. O Objective-C é uma linguagem muito menor que o C ++, com muitos dos mesmos benefícios (e alguns mais). Tudo é compensador, é claro. Porém, a documentação mínima facilita o Obj-C para que pessoas experientes em C (ou C ++) se atualizem.
Ben Zotto

62
Desculpe, mas ObjC é insano. A insistência em uma maneira completamente diferente de declarar funções, o uso de colchetes. Está sendo diferente sem nenhum benefício. Eles poderiam ter elaborado a mesma linguagem eficaz sem a sintaxe ridícula. Eles escolheram não. Assim, é insano.
ruibarbo

13
@Rubarb - Embora eu goste do Objective-C, tenho que concordar que sua sintaxe estranha não serve para nada.
Raphael

@ Ruibarbo, sim, lembre-se que a Apple é a empresa que criou essa insanidade, e a Apple é diferente com o único objetivo de ser diferente.
SeanRamey

14

Tendo alguma experiência nisso, você pode realmente usar o código C ++ para o seu código "principal", mas é necessário usar o objetivo-C para qualquer coisa específica do iPhone.

Não tente forçar o Objective-C a agir como C ++. A princípio, isso parecerá possível, mas o código resultante realmente não funcionará bem com o Cocoa e você ficará muito confuso com o que está acontecendo. Reserve um tempo para aprender adequadamente, sem C ++, como criar GUIs e aplicativos para iPhone e vincular sua base de C ++.


3

Você precisa usar o Objetivo C para interagir com a API do cacau, portanto, não há escolha. Obviamente, você pode usar o C ++ tanto quanto quiser nos bastidores (o Objective C ++ facilita isso).

É uma linguagem insana mesmo, mas também é ... divertido de usar quando você está um pouco acostumado. :-)



2

Estou no processo de portar um aplicativo Android intensivo em computação, escrito em Java para iOS6. Estou fazendo isso portando as partes que não são da interface do usuário do Java para o C ++, escrevendo as partes (mínimas) da interface do usuário no Obj-C e envolvendo a primeira em uma (pequena) interface C usando a técnica C / C ++ padrão, para que ele pode ser acessado a partir do Obj-C, que é afinal um superconjunto de C.

Isso tem sido eficaz até agora, e não encontrei nenhuma dica. Parece ser uma abordagem legítima, já que o Xcode permite criar classes C ++ e classes Obj-C, e alguns dos códigos de amostra oficiais fazem as coisas dessa maneira. Não tive que sair de nenhuma interface oficialmente suportada para fazer isso.

Parece não haver muito a ganhar com a gravação do meu código de interface do usuário restante em C ++, mesmo que fosse possível, tendo em vista a ajuda fornecida pelo construtor de interface no Xcode, então minha resposta seria que você pode usar o C ++ para quase todo o seu aplicativo ou o máximo que achar apropriado / conveniente.


2

Sim, mas Pensar que você pode programar todo tipo de programa em um único idioma é uma idéia falha, a menos que você esteja escrevendo programas muito simples. O objetivo C é para o cacau, assim como o C # é para o .NET. Use a ferramenta certa para o trabalho certo. Tentar fazer o C ++ interagir com o cacau por meio da escrita de código de ponte e tentar fazer com que o código C ++ se comporte de acordo com os requisitos do cacau não é uma boa ideia, nem esperar C ++ o desempenho do objetivo C é. Você deve tentar o layout do design e a arquitetura do aplicativo, mantendo em vista as habilidades existentes e determinar qual parte deve ser escrita no idioma que será construído em conformidade.


0

Atualmente, estou escrevendo uma estrutura de Objective-C ++ chamada Objective-X, que torna possível a programação do iPHONE PURE C ++. Você pode fazer assim:

#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());    
}

e compile-o usando as opções de linha de comando apropriadas do GCC. Eu já compilei este aplicativo helloworld e ele funcionou como um encanto. ;-) Estará disponível em breve no GoogleCode. Pesquise o Objective-X ou visite http://infotronix.orgfree.com/objectivex aprox. uma semana depois!

URL atualizado (mas aparentemente inativo): http://code.google.com/p/objectivex/


4
Por que não esperar pela publicação até que esteja realmente disponível?
Georg Fritzsche

8
Ambos os links são 404 agora
Zhao Xiang

1
Segundo o SourceForge: "A partir de 24/01/2014, esse projeto não está mais em desenvolvimento ativo". sourceforge.net/projects/objectivex
JAL

0

Pode ser um pouco offtopic, mas de qualquer maneira. Você pode programar c ++ diretamente em dispositivos iOS. Confira o aplicativo iOS do CppCode - http://cppcode.info . Eu acredito que ajuda a aprender c e c ++ e objetivo-c mais tarde.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.