Czy można zaprogramować iPhone'a w C ++?

124

Jestem za różnorodnością językową, ale Objective C jest szalony. Jestem więc ciekawy: czy możliwe jest kodowanie aplikacji na iPhone'a w C ++ podczas korzystania z Cocoa API itp.?

Dmitri Nesteruk
źródło

Odpowiedzi:

57

Krótka odpowiedź, tak, w pewnym sensie. Możesz użyć Objective-C ++, o którym możesz przeczytać w Apple Developer Connection.

Jeśli znasz już C ++, nauka Objective-C byłaby całkiem prosta, gdybyś zdecydował się spróbować. Więcej informacji na ten temat znajdziesz również w ADC.

Robert S.
źródło
1
czy możesz polecić stronę internetową lub książkę, która jest skierowana do doświadczonych programistów C ++ do nauki Objective-C? Udało mi się rozgnieść kilka testu aplikacje razem, ale uważam, składnia trochę do tyłu i jestem, że robię rzeczy, które prowadzą do wycieków pamięci itp właśnie z powodu braku znajomości Objective-C pewny
Lea Hayes
3
@LeaHayes Bezpłatna książka pod tytułem „Od C ++ do Objective-C”. Zakłada, że ​​znasz C ++, a następnie mówi, jak różne rzeczy są wykonywane w Objective-C. pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf (to jest angielskie tłumaczenie oryginału francuskiego)
olafure
61

Chociaż Objective-C rzeczywiście wydaje się początkowo „szalony”, zachęcam do trzymania się go. Gdy masz chwilę „a-ha”, nagle wszystko zaczyna nabierać sensu. Dla mnie zajęło około 2 tygodni skoncentrowanej koncentracji na celu C, aby naprawdę zrozumieć ramy Cocoa, język i to, jak to wszystko do siebie pasuje. Ale kiedy naprawdę to „zrozumiałem”, było to bardzo ekscytujące.

Brzmi banalnie, ale to prawda. Wystaw to.

Oczywiście, jeśli przenosisz biblioteki C ++ lub istniejący kod C ++, możesz użyć tych modułów z Objective-C / Objective-C ++.

Mitch Haile
źródło
42

Używam Objective-C, aby połączyć interfejs użytkownika.
Ale twarde wnętrzności kodu są nadal napisane w C ++.

To jest główny cel interfejsu Objective-C interfejsu użytkownika i obsługi zdarzeń.
I świetnie sprawdza się w tym celu.

Nadal lubię C ++ jako zaplecze dla kodu (ale to głównie dlatego, że lubię C ++), możesz dość łatwo użyć Objective-C również do zaplecza aplikacji.

Martin York
źródło
9
@Spanky: Jak o to dokładnie zrobić. Możesz zapisać normalny C w pliku * .m. Możesz pisać normalne C ++ w plikach * .mm (Objective-C ++). Wewnątrz plików Objective-C (++) można używać normalnych, #include <XXX>podobnie jak plików C / C ++.
Martin York,
28

Po pierwsze, stwierdzenie, że Objective-C jest „szalone”, jest zabawne - mam obok siebie książkę Bjarne Stroustrup C ++, która liczy 1020 stron. Plik PDF firmy Apple dotyczący Objective-C to 141.

Jeśli chcesz używać UIKit, będzie ci bardzo, bardzo trudno cokolwiek zrobić w C ++. Każda poważna aplikacja na iPhone'a, która jest zgodna z interfejsem użytkownika Apple, będzie wymagać, aby jej części interfejsu były napisane w Objective-C. Tylko jeśli piszesz grę OpenGL, możesz prawie całkowicie trzymać się C / C ++.

dnolen
źródło
30
Od kiedy to mniej dokumentacji to dobra rzecz? „Język programowania C ++” jest bardzo dokładny i dokumentuje również STL.
Timmmm
2
@Timmmm: Odkąd K&R umieścił ten punkt na pierwszym planie w swojej książce. Objective-C jest znacznie mniejszym językiem niż C ++, z wieloma tymi samymi zaletami (i niektórymi innymi własnymi). Oczywiście wszystko jest kompromisem. Ale minimalna dokumentacja sprawia, że ​​Obj-C jest dość łatwy dla doświadczonych ludzi C (lub C ++), aby szybko opanować.
Ben Zotto
62
Przepraszam, ale ObjC jest szalony. Nacisk na zupełnie inny sposób deklarowania funkcji, stosowanie nawiasów. To jest inne bez korzyści. Mogli stworzyć ten sam skuteczny język bez śmiesznej składni. Zdecydowali się tego nie robić. Więc to jest szalone.
Rabarbar
13
@Rhubarb - Chociaż lubię Objective-C, muszę się zgodzić, że jego dziwna składnia nie ma sensu.
Raphael
@Rhubarb, tak, pamiętaj, że Apple to firma, która wymyśliła to szaleństwo, a Apple jest inny tylko po to, by być innym.
SeanRamey
14

Mając pewne doświadczenie w tym zakresie, rzeczywiście możesz użyć kodu C ++ jako swojego „podstawowego” kodu, ale musisz użyć obiektywnego C do wszystkiego, co dotyczy iPhone'a.

Nie próbuj zmuszać Objective-C do działania jak C ++. Na początku wydaje ci się, że jest to możliwe, ale wynikowy kod naprawdę nie będzie działał dobrze z Cocoa i będziesz bardzo zdezorientowany, co się dzieje. Poświęć trochę czasu, aby nauczyć się poprawnie, bez żadnego C ++, tworzenia GUI i aplikacji na iPhone'a, a następnie połącz swoją bazę C ++.

Chris Jefferson
źródło
3

Musisz użyć Objective C, aby połączyć się z API Cocoa, więc nie ma wyboru. Oczywiście za kulisami możesz używać tyle C ++, ile chcesz (Objective C ++ ułatwia to).

Jest to rzeczywiście szalony język, ale jest też ... zabawny w użyciu, gdy już się do niego przyzwyczaisz. :-)

Frederik Slijkerman
źródło
2

Jestem w trakcie przenoszenia intensywnej obliczeniowo aplikacji na Androida napisanej w Javie na iOS6. Robię to, przenosząc części spoza UI z Java do C ++, pisząc (minimalne) części UI w Obj-C i pakując te pierwsze w (mały) interfejs C przy użyciu standardowej techniki C / C ++, tak że można uzyskać do niego dostęp z Obj-C, który jest w końcu nadzbiorem C.

Jak dotąd jest to skuteczne i nie napotkałem żadnych problemów. Wydaje się, że jest to uzasadnione podejście, ponieważ Xcode umożliwia tworzenie klas C ++, a także klas Obj-C, a niektóre z oficjalnego przykładowego kodu robią to w ten sposób. Aby to zrobić, nie musiałem wychodzić poza żadne oficjalnie obsługiwane interfejsy.

Wydaje się, że nie byłoby wiele do zyskania na pisaniu mojego pozostałego kodu interfejsu użytkownika w C ++, nawet gdyby było to możliwe, biorąc pod uwagę pomoc udzieloną przez konstruktora interfejsu w Xcode, więc moja odpowiedź byłaby taka, że ​​możesz użyć C ++ do prawie cała aplikacja lub tyle, ile uważasz za odpowiednie / wygodne.

JulianSymes
źródło
2

Tak, ale myślenie, że można zaprogramować każdy rodzaj programu w jednym języku, jest błędnym pomysłem, chyba że piszesz bardzo proste programy. Cel C jest dla Cocoa, tak jak C # dla .NET, Użyj odpowiedniego narzędzia do właściwej pracy, Próba interakcji C ++ z Cocoa poprzez pisanie kodu pomostowego i próba dostosowania kodu C ++ do wymagań Cocoa nie jest dobrym pomysłem ani oczekiwanie C ++ wydajność z Celu C wynosi. Powinieneś spróbować zaprojektować układ i architekturę aplikacji, mając na uwadze istniejące umiejętności i określić, która część powinna zostać napisana w jakim języku, a następnie odpowiednio ją zbuduj.

Bilal Ahsan
źródło
0

Obecnie piszę framework Objective-C ++ o nazwie Objective-X, który umożliwia programowanie iPHONE w PURE C ++. Możesz zrobić tak:

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

i skompiluj go używając odpowiednich opcji wiersza poleceń GCC. Już skompilowałem tę aplikację helloworld i w0rkX0rz działa jak urok. ;-) Wkrótce będzie dostępny w GoogleCode. Wyszukaj Objective-X lub odwiedź http://infotronix.orgfree.com/objectivex ok. tydzień później!

Zaktualizowany (ale pozornie nieaktywny) adres URL: http://code.google.com/p/objectivex/

Arpad Goretity
źródło
4
Dlaczego nie zaczekać z wysyłaniem, aż będzie to rzeczywiście dostępne?
Georg Fritzsche
8
Oba łącza są teraz 404
Zhao Xiang
1
Według SourceForge: „Od 2014-01-24 ten projekt nie jest już aktywnie rozwijany”. sourceforge.net/projects/objectivex
JAL,
0

Może to być trochę offtopic, ale i tak. Możesz programować C ++ bezpośrednio na urządzeniach iOS. Sprawdź aplikację CppCode na iOS - http://cppcode.info . Uważam, że później pomaga nauczyć się c i c ++ oraz obiektywne-c.

4ntoine
źródło