5 Stimmen

Selbstbeobachtung in Cocoa

In Kakao, addObserver:forKeyPath:options:context: behält "weder den Empfänger noch einen Beobachter". Daher gehe ich davon aus, dass es erlaubt ist, sich selbst zu beobachten; das heißt, es ist vollkommen zulässig, etwas zu tun wie

[self addObserver:self forKeyPath...]

Solange Sie daran denken, die Registrierung zu löschen self als Beobachter als erstes in dealloc.

Ist diese Vermutung richtig?

12voto

Brian Webster Punkte 11733

Ja, es gibt eigentlich keinen Grund, warum man sich nicht selbst beobachten kann. Aber wie Sie sagten, wie jede KVO Beobachtung, stellen Sie sicher, dass Sie sich selbst als Beobachter zu entfernen, bevor sie deallocated.

Für das Protokoll, eine alternative Möglichkeit, dies zu tun, wenn Sie nur über einen einfachen Schlüssel sprechen, ist ein benutzerdefinierter Setter zu schreiben und den Code auszuführen, den Sie in dem Setter benötigen. Auf diese Weise ist es etwas offensichtlicher, was die Auswirkungen des Aufrufs des Setters sind. Die KVO-Methode ist jedoch etwas flexibler und funktioniert mit Schlüsselpfaden, die mehrere Komponenten enthalten.

1voto

Benedict Cohen Punkte 11742

Ich tue, was Brian Webster gesagt hat. Hier ist ein Beispiel:

//.h
...
@property(readwrite, retain, setter=setMyPropertySynth:) id myProperty;
-(void)setMyProperty:(id)newValue;
....

//.m
...
@synthesize myProperty;

-(void)setMyProperty:(id)newValue
{
    //add code here

    [self setMyPropertySynth:newValue];

    //add more code here
}
...

-1voto

Entfernen Sie einen Beobachter nicht in -dealloc . Warum? Weil, wenn Sie den Garbage Collector einschalten, die Dinge nicht mehr funktionieren; -dealloc wird nie angerufen. Sie sollten einfach die -dealloc y -finalize Methoden für Speicherbezogen Code bereinigen.

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