Frage

Ich nehme an, dass in Objective-C muss ich Instanzvariablen als Teil der Schnittstelle von meiner Klasse, auch wenn diese Variablen sind Implementierungsdetails und verfügen über einen eigenen Zugang zu erklären.

„subjektive“ C, kann ich eine Variable in meiner C-Datei deklarieren und es ist nicht sichtbar außerhalb dieser Übersetzungseinheit. Ich kann es in der entsprechenden H-Datei deklarieren und dann alle, die in dieser Übersetzungseinheit verbindet können die Variable sehen.

Ich frage mich, ob es eine gleichwertige Wahl in Objective-C, oder wenn ich in der Tat jede Ivar in der .h für meine Klasse deklarieren müssen.

Ari.

War es hilfreich?

Lösung

Ari,

Ein guter Hinweis auf wie "unsichtbar" Instanz Variablendeklarationen erreichen kann wird hier mit Kreditrespekt gegeben Matt Gallagher gefunden.

Hope es hilft, Frank

Andere Tipps

Die Instanzvariablen sind traditionell erforderlich, um die Größe der Klasse zu bestimmen. Es ist immer eine schlechte Praxis, um direkt die ivars zugreifen, und das ist nicht der Punkt. In der modernen Laufzeit, dann ist dies weniger notwendig, aber auf jeden Fall ist es keine Abstraktion Leck, es sei denn Kunden auf die Klasse des ivars angewiesen sind, was unmöglich sein sollte, da man sie als @protected oder @private, recht erklären?

Zugriff zu beschränken, können Sie die @private oder @protected Schlüsselwörter verwenden:

@interface Foo : NSObject {
    @private
    int barPrivate;

    @protected
    int barProtected;

    @public
    int barPublic;
}
@end

EDIT:. Scratch alles stellt sich heraus, ich wirklich etwas Schlaf brauchen

ivars sind @protected standardmäßig (obwohl @private und @protected nicht, dass andere Klassen garantieren können nicht darauf zugreifen - Sie können immer Zugang ivars mit getValue:forKey:). Sie sollten sich nicht direkt Zugang ivars von anderen Klassen direkt in jedem Fall - die „Wahl“ ist, ob die ivars als Eigenschaften zu belichten (Sie müssen nur auf alle Klassen verlassen nach der Konvention nicht Zugang ivars direkt).

In dem neuen Objective-C-Laufzeit, Sie müssen nicht ivars überhaupt zu erklären, da sie zur Laufzeit synthetisiert werden können, aber leider das nicht funktioniert mit dem iPhone-Simulator, so jetzt, ist es am besten, nur um erklärt alle ivars in der H-Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top