Co @private
oznacza cel C?
ios
objective-c
cocoa
private
Jeff Wolski
źródło
źródło
Odpowiedzi:
To modyfikator widoczności - oznacza to, że zmienne instancji zadeklarowane jako
@private
mogą być dostępne tylko dla instancji tej samej klasy . Członkowie prywatni nie mogą uzyskać dostępu do podklas ani innych klas.Na przykład:
Ponadto, aby wyjaśnić, metody są zawsze publiczne w Celu C. Istnieją jednak sposoby „ukrywania” deklaracji metod - więcej informacji można znaleźć w tym pytaniu .
źródło
Jak powiedział htw, jest to modyfikator widoczności.
@private
oznacza, że dostęp do ivar (zmienna instancji) można uzyskać wyłącznie bezpośrednio z instancji tej samej klasy. Może to jednak niewiele dla ciebie znaczyć, więc dam ci przykład.init
Dla uproszczenia wykorzystamy metody klas jako przykłady. Skomentuję w tekście, aby wskazać interesujące przedmioty.Aby odpowiedzieć na twoje pytanie, @private chroni ivars przed dostępem przez instancję dowolnej innej klasy. Zauważ, że dwa wystąpienia MyFirstClass mogą uzyskać bezpośredni dostęp do wszystkich swoich ivarów; zakłada się, że ponieważ programista ma pełną kontrolę nad tą klasą bezpośrednio, umiejętnie wykorzysta tę umiejętność.
źródło
@private
szablon dla obiektu, nie jest już tak rzadki.@implementation
bloku. A kiedy to zrobisz, są one faktycznie prywatne, bez względu na modyfikatory widoczności, ponieważ nie są nawet widoczne dla osób spoza tego pliku.Ważne jest, aby zrozumieć, co to znaczy, gdy ktoś mówi, że nie masz dostępu do
@private
zmiennej instancji. Prawdziwa historia jest taka, że kompilator da ci błąd, jeśli spróbujesz uzyskać dostęp do tych zmiennych w kodzie źródłowym. W poprzednich wersjach GCC i XCode zamiast błędu pojawiałoby się ostrzeżenie.Tak czy inaczej, w czasie wykonywania wszystkie zakłady są wyłączone. Te
@private
i@protected
ivars mogą być dostępne przez obiekt dowolnej klasy. Te modyfikatory widoczności utrudniają kompilację kodu źródłowego w kod maszynowy, który narusza intencję modyfikatorów widoczności.Nie polegaj na modyfikatorach widoczności w systemie ivar! W ogóle nie zapewniają. Są one przeznaczone wyłącznie do egzekwowania w czasie kompilacji życzeń budowniczego klas.
źródło