Czytam tutaj Naucz się C przed celem C?
Zazwyczaj następnie zastępuję część kodu Obj-C czystym kodem C (w końcu możesz je mieszać tak, jak chcesz, zawartość metody Obj-C może być całkowicie czystym kodem C)
Czy to prawda?
Czy można zbudować aplikację na iPhone'a wyłącznie w języku programowania C?
Odpowiedzi:
Cholera, zajęło mi to trochę czasu, ale zrozumiałem:
main.c:
AppDelegate.c:
Widok. C
Jest brzydka, ale działa.
Jeśli chcesz to pobrać,
możesz pobrać go z mojego Dropbox tutajMożesz go pobrać z mojego repozytorium GitHub tutaj :
źródło
@"AppDelegate
jest stały NSString i nie będzie się kompilował z kompilatorem C-only. UżyjCFSTR("AppDelegate")
zamiast tego.Objective-C jest nadzbiorem języka C, więc teoretycznie możliwe jest napisanie programu w całości w C, jednak jeśli nie jesteś dobrze zorientowany
OpenGL ES
, będziesz musiał zrobić przynajmniej trochę objC (nawet próbka Richa ma const NSString *), w przeciwnym razie będziesz musiał napisać własne poglądy.OK, powyższe jest całkowicie błędne. Powiem, że jestem zdumiony. Rich osiągnął ten wzniosły cel, więc przeniosłem go na Maca (źródło tutaj ). Poniższe pliki nie mają nagłówków, nie zawierają linków do Cocoa, a projekt nie ma stalówki:
AppDelegate.m
Widok m
prefix.pch
źródło
Cytowany fragment jest prawdziwy, ale odpowiedź na twoje pytanie brzmi „nie”.
Aby zilustrować, o czym mówił Mecki w tym drugim pytaniu:
Nie ma nic, ale czysty kod C w ciągu tej metody, ale sama metoda jest kod Objective-C, jak to klasa, która zawiera tę metodę.
Można więc zrobić to, co powiedział Mecki, ale nie możesz (praktycznie - jak pokazał Richard J. Ross III, technicznie możliwe, ale dość dużo pisania) napisać cały program Cocoa Touch w czystym C.
źródło
W rzeczywistości część kodu zamieszczonego tutaj, chociaż napisanego w C, wciąż wywołuje kod celu C :). Nie wiem, czy to rzeczywiście pasuje do scenariusza z oryginalnego plakatu, kiedy zapytał
ale zgodziłbym się z ludźmi mówiącymi, że ogólnie rzecz biorąc i dla aplikacji z GUI, musisz napisać GUI w OpenGL (czyli C).
Myślę, że tak właśnie robi większość gier, prawda? Chociaż nie jestem pewien, czy jest dostęp do I / O iPhone'a (na przykład ekranu dotykowego) w C.
Na koniec, faceci, którzy napisali kod powyżej rocka! :)
źródło
objc_msgSend()
jest czystym C. Fakt, że wywołania iinitWithFrame:
nie ma znaczenia, ponieważ implementacje metod są również funkcjami C.