2012-04-04 7 views
6

Zauważyłem, że w wersji demonstracyjnej kalkulatora Stanford CS193p połączenie IBOutlet zostało przeciągnięte z etykiety do pliku nagłówkowego. Jednak połączenie IBAction zostało utworzone bezpośrednio w pliku .m. Próbowałem czytać dokumentację i wyszukiwać w Google, ale nie mogłem znaleźć przyczyny tego.IOS CS193p - Dlaczego połączenie IBAction zostało przeciągnięte do pliku .m, a nie do .h?

Chciałbym argumentować, że metoda IBAction digitPressed powinna być również zadeklarowana w pliku nagłówkowym (nie powinna być częścią interfejsu?).

Jestem oczywiście dość nowy w Objective C (głównie pracował w Javie), więc jestem pewien, że brakuje mi czegoś podstawowego.

Czy ktoś może wyjaśnić?

Odpowiedz

8

Zgłaszanie rzeczy w pliku nagłówkowym klasy powoduje, że są one częścią interfejsu publicznego. Dotyczy to punktów sprzedaży i działań zdefiniowanych na kontrolerze widoku.

To, czy coś powinno zostać upublicznione, to pytanie projektowe. Dobry dyrektor to: tylko jeśli tak musi być. W przypadku placówek i akcji ViewControllers często nie muszą one być - i dlatego nie powinny - być publiczne.

To, co zwykle się zdarza, to z góry odgadnąć, co powinien zawierać interfejs publiczny, a następnie (jeśli jesteś porządnym programistą), spróbuj ponownie, gdy dojdzie do wdrożenia i usuń wszystko, co nieistotne.

+3

Możliwość zadeklarowania IBOutlets w pliku .m i powiązania ich w IB jest całkiem nowa. Dema i samouczki nie wszystkie dogoniły. Jest to zdecydowanie lepsze rozwiązanie i unika bardzo złych praktyk, takich jak modyfikowanie IBOutlets innego obiektu (czego nigdy nie powinno się robić). –

+0

@danh, czy możesz wyjaśnić, dlaczego placówki i działania nie muszą być publiczne? W jaki sposób widok uzyskuje dostęp do nich w kontrolerze, jeśli nie są one publiczne? – Rahul

+1

ViewController może być mylącą nazwą, jeśli uczyłeś się w MVC. Nie jest to, jak mogłoby się wydawać, parowanie dwóch rówieśników w tym akronimie. Lepiej jest myśleć o tym, jako o tym, co kontroluje widok. W tym sensie bardziej sensowne jest utrzymywanie własnego poglądu w tajemnicy. To nie jest żadna reguła, a raczej zwykła praktyka. Widok jest właściwością kontrolera widoku, a tworzone podklasy często mają dodatkowe subviews, które kontrolują. Ta kontrola jest zwykle dość absolutna, ponieważ nie dzielą tej kontroli z innymi. Pozwól mi trochę google na dobry odnośnik, a ja go tutaj. – danh

Powiązane problemy