9 Stimmen

Deklaration privater Mitgliedsvariablen

Ich habe vor ein paar Wochen angefangen, Objective-C zu lernen, und ich verstehe immer noch nicht, wie man die Kapselung einer Klasse richtig handhabt. Wie deklariert man am besten eine private Mitgliedsvariable in einer Klasse?

Es scheint, dass das Setzen der richtigen Getter/Setter für Ihre Member-Variable mit "@property" der richtige Weg ist, mehr als nur die Deklaration "@private" in der Schnittstelle. Aber es scheint mir, dass dies immer noch anderen Klassen den Zugriff auf diese Variablen ermöglicht. Selbst wenn Sie die Eigenschaft als "readonly" deklarieren, kann eine externe Klasse auf den Verweis auf die Mitgliedsvariable zugreifen und sie verändern!

Ich vermute also, dass der beste Weg, eine private Member-Variable zu deklarieren, darin besteht, keine Guetter/Setter einzubeziehen, indem man keine Eigenschaft deklariert. Liege ich richtig? Oder gibt es einen besseren Weg?

Danke

23voto

vfn Punkte 5967

Wenn Sie nicht wollen, dass andere Klassen darauf zugreifen können, deklarieren Sie die @Eigenschaft in Ihrer Implementierung und erstellen Sie eine anonyme Kategorie für Ihre Klasse.

Header-Datei:

// MyClass.h
@interface MyClass : NSObject {
    NSObject *_privateObject;
    NSObject *_readonlyObject;
    NSObject *_publicObject;
}

@property (nonatomic, retain, readonly) NSObject *readonlyObject;
@property (nonatomic, retain) NSObject *publicObject;

@end

Umsetzung:

// MyClass.m
@interface MyClass ()
    @property (nonatomic, retain) NSObject *privateObject;
    // Make it writable on the implementation
    @property (nonatomic, retain, readwrite) NSObject *readonlyObject;
@end

@implementation MyClass

@synthesize privateObject = _privateObject;
@synthesize readonlyObject = _readonlyObject;
@synthesize publicObject = _publicObject;

Dies sind Beispiele für drei verschiedene Eigenschaften.

  • privatesObjekt ist für andere Klassen nicht sichtbar;
  • readonlyObject ist sichtbar, aber nur lesbar;
  • publicObject ist sichtbar und kann abgerufen und gesetzt werden;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X