Dlaczego mamy wiersz "@interface ViewController" w pliku implementacji i pliku nagłówkowym dla kontrolera view w xcode?Powód '@ interface ViewController' w pliku implementacji i pliku nagłówkowym dla kontrolera view
Odpowiedz
Ma to związek z widocznością zawartości @interface
. Gdy jest zawarty w pliku nagłówkowym, jest dostępny dla innych klas, aby zobaczyć, kiedy importuje plik nagłówkowy. Gdy jest zawarty w pliku implementacji, zawartość jest dostępna tylko dla tego pliku implementacji. Zazwyczaj, gdy jest zadeklarowany w pliku implementacji, odbywa się to poprzez rozszerzenie klasy (tj. @interface ClassName()
, ()
oznacza kategorię rozszerzenia/anonimowości), chociaż można użyć nazwanej kategorii, jeśli jest to pożądane.
Jest kilka powodów, dla których tak się dzieje. Głównym jest zdefiniowanie prywatnych zmiennych lub właściwości. Nie chcesz, aby były one dostępne dla wszystkich, którzy importują plik nagłówkowy, ale potrzebujesz miejsca do przechowywania informacji wewnętrznych. Na przykład, pozwoli to m_isActive
być wykorzystane w ciągu zaledwie realizacji:
@interface Class() {
BOOL m_isActive;
}
Można także zmienić właściwości tylko do odczytu zadeklarowane w pliku nagłówka, tak, że plik realizacja ma readwrite
dostęp do niej przy użyciu notacji dot. Na przykład:
Header:
@interface Class
@property (nonatomic, readonly) NSString* name;
@end
Realizacja:
@interface Class()
@property (nonatomic) NSString* name;
@end
@implementation Class
...
self.name = @"WDUK"; // This is allowed, as the class extension has overridden the readonly attribute via a redeclaration of the property
...
@end
Innym popularnym zastosowaniem jest prywatnie deklarują, że są zgodne z poszczególnych protokołów, które jest szczegółów wdrażania i nie muszą być wystawione w publicznym pliku nagłówkowym. Na przykład, gdy implementacja używa obiektu, który wymaga, aby był delegatem, i nie chcesz zanieczyszczać pliku nagłówkowego protokołem, który nie jest używany poza klasą.
Inne zastosowania (które zostały pozostawione w ciemności z nowymi poprawkami LLVM/Clang) miały na celu zdefiniowanie prywatnych metod. Nie jest to już wymagane, ponieważ kompilator będzie szukać metod, które nie zostały zadeklarowane w odpowiednim pliku nagłówkowym, i zakłada, że są one prywatne dla klasy i same je deklarują.
Kluczową częścią wziąć z tego wszystkiego jest to, że coś wewnątrz @interface
w pliku nagłówkowym (wyjątkiem zmiennych instancji określonych tam poprzez @private
lub @protected
) są publiczne, a wszystko w pliku wdrażania jest z natury prywatnej.
Ten w pliku nagłówkowym określa interfejs publiczny.
W pliku implementacji znajduje się rozszerzenie klasy o rozszerzeniu, które rozszerza publiczny interfejs o dowolne prywatne szczegóły implementacji.
- 1. Definiowanie właściwości w pliku nagłówkowym względem celu pliku implementacji c
- 2. Definiowanie konstruktora w pliku nagłówkowym Plik implementacji VS (.cpp)
- 3. Deklaracja i zainicjować stałe w pliku nagłówkowym
- 4. stwardnienie definicja w pliku nagłówkowym
- 5. Funkcja Inline w pliku nagłówkowym w C
- 6. Inicjalizacja stałą Eigen matrycy w pliku nagłówkowym
- 7. Przedstawienie obiektu ViewController na pliku XIB w pliku SWIFT
- 8. Deklarowanie klasy Qt w pliku nagłówkowym
- 9. Zgłaszanie wektorów w pliku nagłówkowym C++
- 10. Cel #ifndef FILENAME .... # endif w pliku nagłówkowym
- 11. <string> w pliku nagłówkowym
- 12. C dołączyć do tablicy w pliku nagłówkowym
- 13. Wiele specyfikacji dla tej samej funkcji w pliku nagłówkowym Erlang
- 14. Co należy uwzględnić w pliku nagłówkowym dla ostream
- 15. Jaki jest powód implementacji IEnumerable i IEnumerator
- 16. XCode Nieznana klasa ***** w pliku Interface Builder
- 17. Dlaczego nie mogę zdefiniować prostych funkcji C w pliku nagłówkowym?
- 18. Czy mogę zadeklarować ciąg w pliku nagłówkowym w definicji klasy?
- 19. Jak zdefiniować tablicę ciągów znaków w pliku nagłówkowym?
- 20. Dlaczego Xcode 4.3 Umieść @ Classface ClassName() w pliku implementacji?
- 21. Co się stanie, jeśli zaimplementuję klasę w pliku nagłówkowym?
- 22. vim: Jak przejść do definicji w zewnętrznym pliku nagłówkowym C
- 23. C++: Kiedy dopuszczalne jest posiadanie kodu w pliku nagłówkowym?
- 24. Co to jest plik ViewController.swift (Interface) dla - w Counterparts
- 25. Czy konieczne jest zdefiniowanie listy inicjalizacji w pliku nagłówkowym?
- 26. Użycie struct w pliku nagłówkowym "nieznany typ" błąd
- 27. Jak wyprowadzić powód otwartego pliku PHP
- 28. C++ - czy w pliku nagłówkowym należy zdefiniować funkcje znajomego?
- 29. C++ dodawanie metody do klasy zdefiniowanej w pliku nagłówkowym
- 30. Ograniczanie zakresu "używania przestrzeni nazw" w pliku nagłówkowym
Innym zastosowaniem rozszerzenia klasy jest prywatne oświadczenie, że klasa jest zgodna z jednym lub większą liczbą protokołów. – rmaddy
Pokonaj mnie, by uderzyć, dodawał to już! Jednak bardzo dobry punkt. – WDUK
O czym mówią te protokoły? –