Zugriff auf geschützte Instanzvariablen in Unterklassen in Objective-C

8

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?

    
user1899125 02.10.2013, 20:44
quelle

2 Antworten

4

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 .

%Vor%

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%     
Brian Nickel 02.10.2013 21:07
quelle
0

Instanzvariablen, die im Abschnitt @implementation einer Klasse deklariert sind, sind standardmäßig privat und daher in Unterklassen nicht sichtbar. Sie können den Sichtbarkeitsmodifikator @protected verwenden, um die Sichtbarkeit zu ändern.

%Vor%     
jlehr 02.10.2013 21:07
quelle

Tags und Links