Czy można wyświetlić dokładny kod wygenerowany przez @synthesize?Wyświetlanie kodu wygenerowanego przez @synthesize dla programu pobierającego/ustawiającego
Odpowiedz
można odczytać źródła kompilatora dzyń, aby zobaczyć kod C++, który generuje metody getter i setter:
http://llvm.org/svn/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp
To bardzo tajemnicze, ale to najdokładniejszy sposób widzenia wygenerowany kod.
Można również spojrzeć na implementacje objc_getProperty i objc_setProperty w Apple's runtime implementation. Chociaż kod ten nie jest dosłownie taki sam, jak kod generowany, jest znacznie łatwiejszy do odczytania i daje wyraźne wskazanie, co powinien zrobić odpowiedni program pobierający i ustawiający.
Jeśli "wyczyść" zawiera mnóstwo martwego kodu w pliku, to tak. Ale masz rację, dobre rzeczy też tam są pochowane. –
Pewnie, że tak. Przejdź do pliku .m, w którym masz właściwość @synthesized
, a następnie z menu Build wybierz "Show Assembly Code". Kompilator wygodnie wkłada się rzeczy jak:
.align 4, 0x90
"-[Foo setStr:]":
Leh_func_begin2:
Lfunc_begin2:
....
I
.align 4, 0x90
"-[Foo answer]":
Leh_func_begin3:
Lfunc_begin3:
....
Och, chciałeś kod Objective-C? Niestety, robi to kompilator, a kompilator czyta Objective-C, ale pisze w Assembly.
Czy mogę zapytać, dlaczego tego chcesz? –
Soitanly. Chociaż mogłem się czegoś nauczyć od oglądania tego kodu. – cfischer
Powiązane: http://stackoverflow.com/a/589348/412916 http://stackoverflow.com/questions/917884/ http://cocoawithlove.com/2009/10/memory-and-thread-safe-custom- property.html – Jano