Przejrzałem kilka postów na ten temat. Może nie natknąłem się na "jedynego" i ktoś wskaże mi w tym kierunku. Pytanie jest proste i prawdopodobnie ma prostą odpowiedź.Jak zadeklarować zmienne i metody instancji niewidoczne lub użyteczne poza instancją klasy?
Jeśli masz dwa znaki iv, na przykład "public_ivar" i "private_ivar", gdzie/jak powinieneś je zadeklarować, aby to, co publiczne, było publiczne, a to, co prywatne, nie zostało w żaden sposób ujawnione nikomu patrzącemu na nagłówek plik?
To samo pytanie w przypadku "public_method" i "private_method".
Lubię czyste pliki nagłówkowe (w innych językach), które tylko eksponują metody i znaki iv, które chcę zobaczyć. Powinieneś być w stanie opublikować swój plik nagłówkowy i nie narażać się na niebezpieczeństwo dostępu do czegoś, czego nie powinien. Jak to zrobić w celu-C.
Na przykład, powiedzmy, że zdecyduję, że muszę użyć ivar do śledzenia niektórych danych, licznika lub czegoś podobnego, pomiędzy różnymi metodami klasowymi, które wszystkie wymagają dostępu do tych informacji. Jeśli tenvar jest zadeklarowany w nagłówku w nagłówku @interface, jego istnienie jest publicznie anonsowane i jest użyteczne dla każdego, kto tworzy instancję klasy. Idealnym scenariuszem byłoby to, że ten ivar nie byłby w ogóle widoczny poza implementacją klasy.
OK, przyjrzę to. Robię trochę pracy z Genetycznymi Algorytmami i Sieciami Neuronowymi. Klasy kończą się stosami zmiennych, które są potrzebne wewnętrznie. Bardzo niewiele z nich naprawdę potrzebuje widoczności na poziomie pliku nagłówkowego. Czy twój pierwszy przykład pliku implementacji dla iOS4 + (ponieważ nie deklarujesz int privateInt przed przedrostkiem @property)? –
@Martin Nie jestem pewien, kiedy Objective-C 2.0, który pozwala na automatyczne tworzenie zmiennych instancji kopii zapasowej, został udostępniony systemowi iOS. –
@Martin [Ta strona w witrynie firmy Apple] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html%23//apple_ref/doc/uid/ TP40008048-CH106-SW1) nie zawiera konkretnej wersji systemu iOS. –