Krótki opis: w nawiasie odcinek klasą na @interface
LUB @implementation
jest tylko dla deklarując instancji zmiennych (aka "Ivar"). Słowo kluczowe extern
służy tylko do deklaracji zmiennych globalnych (lub funkcji, ale jest to inny temat).
Dlatego nie można zadeklarować zewnętrznego ivar.
Gritty Szczegóły: Zmienne są najpierw zadeklarowane, a następnie zdefiniowane. To rozróżnienie jest zwykle niewyraźne dla zmiennych w zakresach lokalnych, ponieważ lokalnie zadeklarowana zmienna bez wyraźnej definicji będzie często przydzielana i nadawana przez kompilator domyślnej wartości.
Zmienne globalne są potencjalnie dostępne w dowolnym zakresie, pod warunkiem, że zakres wie, że globalny istnieje. W tym miejscu pojawia się słowo kluczowe extern
- ono deklaruje, że zmienna globalna istnieje i w innym miejscu zdefiniowano zdefiniowaną jako. Jest to przydatne tylko wtedy, gdy chcesz uzyskać dostęp do zmiennej globalnej w różnych plikach kodu.
Best Practices: Twoja książka ma jakiś kod, który deklaruje extern
zmienną w pliku realizacji (np pliki „.m”, itd.) ... że może pracować, ale to jest złą praktyką, ponieważ jesteś co potencjalnie złych założeń o tym, czy dany globalny rzeczywiście ma prawidłową definicję w innym miejscu. (Ale, fantazyjni kompilatorzy odkryją ten typ błędu.)
Zamiast tego, najlepszą praktyką jest deklarowanie zmiennej extern raz w pliku nagłówkowym, mieć dołączony plik implementacji, który jest dedykowany do definiowania elementów zewnętrznych w tym nagłówku, oraz następnie umieść ten nagłówek w innych plikach implementacji, które chcą użyć tej zmiennej globalnej.
Dzięki za odpowiedź HachiEthan. Przypadkowo, książka, do której się odwołuję, używa "extern" w pliku ".m". –
@Rut Robię małe badania, ponieważ nie zagłębiłem się w gęstwiny extern wcześniej! (I to pomoże mi w mojej obecnej pracy.) Niedługo zaktualizuje odpowiedź. =) – MechEthan
Naprawdę doceniam to HachiEthan! –