Jestem całkiem pewny programowania w Objective-C i C ++, ale uważam, że Objective-C jest nieco łatwiejszy w użyciu i bardziej elastyczny i dynamiczny.
Jakie byłyby zalety i wady używania C ++ zamiast Obj-C do pisania gier w iOS? Czy raczej są jakieś znane problemy z używaniem Obj-C w porównaniu do C ++?
Na przykład podejrzewam, że mogą występować problemy z wydajnością Obj-C w porównaniu do kodu napisanego w C / C ++.
c++
ios
performance
objective-c
Martin Wickman
źródło
źródło
Odpowiedzi:
Jedna wielka zaleta C ++: jeśli zdecydujesz się to zrobić, relatywnie łatwo będzie przenieść się na Android / PC / DS / PSP / (tutaj wstaw platformę). Cel C zablokuje Cię w systemie iOS, dopóki nie zdecydujesz się przepisać całej gry.
źródło
Nie ma tu prawdziwych zalet ani wad, a przynajmniej takich, które powinny zmusić programistę do wygodnego posługiwania się jednym językiem do korzystania z drugiego.
Wydajność nie powinna stanowić problemu. Jest mało prawdopodobne, aby pisać ciężkie podnoszenie z dużą ilością komunikatów w wewnętrznych pętlach, jeśli jesteś dobrym programistą Obj-C, co oznacza, że naprawdę będziesz pisać te wewnętrzne pętle w C. Jeśli nie jesteś niski programistę poziomów, są szanse, że ciężkie podnoszenie zostanie wykonane przez biblioteki, które zdecydujesz się odłożyć na później, a będziesz na łasce tego, co zdecydujesz się zrobić.
Przenośność to prawdziwy problem, jeśli ci na tym zależy. Jeśli nie, to meh. Bycie wieloplatformowym to jeszcze nie koniec. Osiągnięcie sukcesu na pierwszym miejscu byłoby fajne :) Zawsze możesz później portować. Jeśli i tak nie planujesz być na wielu platformach od pierwszego dnia, samo bycie w tym samym języku nie zaprowadzi cię daleko: istnieje wiele innych rzeczywistych różnic między platformami, które wymagają rozwiązania.
Ukończenie projektu jest ważniejsze niż martwienie się technologią, a jeśli jesteś bardziej produktywny w Obj-C, pozostań w Obj-C.
Moja preferencja? Jestem facetem z C ++. I jak Obj-C dobrze, ale jestem szczęśliwy w C ++, a ja zrobić zapisu przekrój kod platformy.
źródło
Nie ma problemów z wydajnością Obj-C w stosunku do C ++. Oba są skompilowanym kodem i przypominają, że Obj-C jest nadzbiorem C, a Obj-C ++ jest nadzbiorem C ++, co jest świetne, gdy chcesz mieszać Obj-C i C ++ w tym samym programie (łatwe do zrobienia i XCode ma ładne wsparcie dla strony C ++). Wszystkie kombinacje językowe obsługują OpenGL, więc każda poważna praca graficzna jest w porządku, a obsługa bibliotek jest zgodna z Apple bez względu na język.
To powiedziawszy, jaki jest cel twojej gry?
Jeśli piszesz wyłącznie dla IOS, nie martw się i pisz w dowolnym języku lub kombinacji, w której czujesz się bardziej komfortowo. Dla mnie jest to Obj-C ++ ze STL, ponieważ jest to moja ulubiona część C ++. Ponieważ wolę Obj-C nieco niż C ++, zwykle używam tej opcji.
Jeśli piszesz w celu przeniesienia na inne urządzenie, napisz w C ++ z warstwą tłumaczenia do Obj-C, aby poradzić sobie z wszelkimi specyficznymi dla urządzenia rzeczami (grafika, dane wejściowe, kamera, ...), do których dzwoni się punkty wejścia w Twojej aplikacji.
Jeśli jesteś najczystszy i chcesz tylko jednego języka, napisz w Obj-C.
Inni mówili o innych bibliotekach (fizyka i tym podobne). Nie ma absolutnie żadnych problemów z dostępem do któregokolwiek z wybranych języków (Obj-C, C ++ lub Obj-C ++). Nie będzie również żadnych problemów z wydajnością tych bibliotek w żadnym języku.
Zastrzeżenie: Istnieje wywołanie pośrednie wskaźnika z przekazywaniem wiadomości. Nie jestem pewien, jak bardzo można to zinterpretować jako narzut, ponieważ jestem prawie pewien, że jest to dokładnie to samo, co odziedziczone wywołanie metody C ++. Czy ktoś może to wyjaśnić?
Mam nadzieję, że to pomaga
Zawietrzny.
źródło
Vector3D
klasę w Obj-C? Moje przeczucie mówi mi, że może to prowadzić do złej wydajności.To zależy dokładnie od tego , co programujesz. Jeśli jest to głównie logika gry wykorzystująca istniejące mechanizmy fizyki i grafiki, mogę śmiało powiedzieć, że nie widzę żadnego powodu, aby używać c lub c ++, jeśli wolisz obj-c. Jeśli zamierzasz wdrażać klasy renderowania lub fizyki, prawdopodobnie napisałbym te, używając c lub c ++. Cocos2d - cudowna i jedna z najpopularniejszych bibliotek gier na iOS napisana jest w obj-c.
Przeczytaj ten artykuł - odpowiednia część to „podział pracy”, może pomóc ci zdecydować, kiedy kodować w języku wyższego poziomu, a kiedy niższego poziomu: kod zarządzany w grach
Podczas gdy narzut na cel c nie powinien znajdować się w pobliżu C # i nawet nie jest zarządzany (w iOS), myślę, że logika nadal obowiązuje, a urządzenia z iOS również nie są tak silne, jak komputer, który interpretuje MSIL :)
źródło
To badanie mówi, że aby naprawdę uzyskać wydajność w grze intensywnie wykorzystującej procesor, musisz użyć C. Linkowany artykuł jest kompletny z projektem XCode, który możesz uruchomić.
Wierzę, że wiersz jest: Korzystanie z Objective-C, gdzie trzeba współdziałać z funkcji iPhone (po wszystkim oddanie trampoliny wszędzie nie może być dobre dla nikogo ), ale jeśli chodzi o pętle, takie rzeczy klas obiektów wektorowych lub intensywny dostęp do tablicy, trzymaj się tablic C ++ STL lub C, aby uzyskać dobrą wydajność.
To znaczy, byłoby głupio to widzieć
position = [[Vector3 alloc] init] ;
. Po prostu prosisz o wyniki wydajności, jeśli używasz referencji dla podstawowych obiektów, takich jak wektor pozycji.Zobacz także te porównania,
źródło