2011-06-24 10 views
7

W celu-c w jaki sposób uczynić selektor o błędnej nazwie wygenerować błąd czasu kompilacji?Tworzenie selektora o zmyślonej nazwie generuje błąd czasu kompilacji

Załóżmy, że mam ten

@selector(some_misnamed_func) 

i moja klasa ma tego członka

-(void)some_func 

chcę objective-c kompilator mi powiedzieć, że nie może znaleźć tej funkcji w kompilować czas, zamiast generować wyjątek podczas działania tylko wtedy, gdy ten kod jest uruchamiany.

Odpowiedz

10

Skompiluj swój kod za pomocą -Wundeclared-selector lub Nieopisany selektor w ustawieniach kompilacji Xcode. Ponieważ jest to tylko ostrzeżenie, możesz połączyć je z -Werror (lub w Traktowaniu ostrzeżeń jako błędy w Xcode), aby ostrzeżenie (i wszystkie inne ostrzeżenia) zachowywały się jak błąd i skutecznie przerwać kompilację.

+0

+1 Interesujące. Ale to pomijałoby dynamiczną naturę Celu C, prawda? –

+1

Niezupełnie; tak długo, jak selektor jest deklarowany * gdzieś *, jest OK. Biorąc pod uwagę skazę systemu typu C na argumentach/wartości zwracanej, próba dynamicznego wywoływania nietypowych selektorów generycznych jest tak czy inaczej światem bólu. – bbum

6

Kompilator może ostrzegać, jeśli nie ma takiego selektora w widocznych plikach. A jeśli włączysz ostrzeżenia jako błędy, dostaniesz niezły błąd. Połów jest taki, że jeśli pomylisz prawy selektor z innym istniejącym selektorem (nawet w zupełnie innej klasie), kompilator nic nie powie. Jest to spowodowane late binding, kompilator nie może znać wszystkich wiadomości, na które klasa odpowie w czasie wykonywania.

+0

dziękuję - przyjęto odpowiedź Bavariousa jako odpowiedź, ale otrzymałem +1 od Ciebie, ponieważ była dobra. – sashang

Powiązane problemy