2010-10-13 6 views
5

Czy można wyświetlić dokładny kod wygenerowany przez @synthesize?Wyświetlanie kodu wygenerowanego przez @synthesize dla programu pobierającego/ustawiającego

+0

Czy mogę zapytać, dlaczego tego chcesz? –

+0

Soitanly. Chociaż mogłem się czegoś nauczyć od oglądania tego kodu. – cfischer

+0

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

Odpowiedz

5

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.

+0

Jeśli "wyczyść" zawiera mnóstwo martwego kodu w pliku, to tak. Ale masz rację, dobre rzeczy też tam są pochowane. –

5

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.