Warum, wenn ich eine Variable in einem @ Implementierungsblock zwischen den Klammern {} deklariere, führt der Versuch, auf die Variable in einer Unterklasse zuzugreifen, zu einem Kompilierungsfehler?
Das hängt davon ab, wo Sie Ihre Instanzvariablen platzieren. Mit dem modernen Objective-C können Sie sie in @interface
oder @implementation
platzieren oder sie nicht mit @synthesize
deklarieren und automatisch synthetisieren.
Stellen Sie sich vor, wir haben eine Klasse A:
A.h
%Vor%A.m
%Vor% Wenn wir eine Unterklasse B
deklarieren, importieren wir den Header und können die Deklaration von i
sehen, aber da wir die Implementierung nicht importieren können, können wir nichts über die Deklaration von j
wissen.
Der folgende Code erzeugt einen Fehler in der Zeile j
.
Aktualisieren / Zusätzliche Notiz
Zusätzlich zur Implementierung von Klassen in ihren eigenen Dateien ( C.m
) können Sie mehrere Implementierungen in einer einzigen Datei deklarieren. In diesem Fall können diese Klassen auf @implementation
ivars zugreifen, die in der Oberklasse deklariert sind:
C.h
%Vor%A.m
%Vor%Tags und Links objective-c scope inheritance