Zaleta deklarowania ivars w sekcji @implementation
jest lepsza enkapsulacja. W ten sposób, ivars nie muszą pojawiać się w pliku .h
i dlatego nie są widoczne dla zewnętrznych użytkowników twojej klasy, którzy tylko zobaczą plik nagłówkowy. To lepiej ukrywa wewnętrzną implementację klasy.
Ogólnie rzecz biorąc, teraz, że właściwości mogą mieć auto-syntetyzowane Ivars i inne Ivars mogą być zadeklarowane bezpośrednio w bloku @implementation
, nie widzę powodu, dlaczego należy zadeklarować Ivars w ogóle w swoim @interface
(oprócz kompatybilności wstecznej).
Dlaczego zadeklarować NSString w zakresie?
Ponieważ jest to jedyny sposób zadeklarowania zmiennej instancji. W przeciwnym razie zadeklarowałbyś zmienną, do której można uzyskać dostęp z dowolnego miejsca w tym samym pliku (zobacz pytanie, do którego odnośnik został dołączony w swoim komentarzu).
Więc jeśli zgłoszę, że NSString jest poza zakresem, czy stałoby się zmienną globalną? Mam na myśli, że wszystkie klasy zewnętrzne mogą uzyskać dostęp do zmiennej? –
Sortuj; zobacz pytanie, że jakaś myśl była dupe, ponieważ obejmuje różnicę między ivars i globals/statics. Zauważ, że deklaracje ivar w '@ implementacji' są stosunkowo nowe - nie było to możliwe w 32-bitowym środowisku wykonawczym Mac OS X, ze względu na sposób generowania klas przez kompilator. Po rozwiązaniu problemu "delikatnej klasy bazowej" możliwe stało się automatyczne syntezowanie i/lub zadeklarowanie ivars poza głównym "interfejsem @". – bbum