Wenn ich eine Eigenschaft wie folgt habe
%Vor%Und weisen Sie ihm eine Eigenschaft zu
%Vor%KVO wird wie erwartet ausgelöst. Wenn ich später dann denselben Wert zuweisen
%Vor%KVO wird wieder feuern. Ich hatte angenommen, dass KVO in Objective-C nicht ausgelöst würde, wenn der zugewiesene Wert nicht anders wäre. Es scheint, dass ich falsch bin.
Gibt es eine Möglichkeit, dieses Standardverhalten zu erzwingen, d. h. die KVO-Benachrichtigungen zu deaktivieren, die jedes Mal ausgelöst werden, wenn ein Wert zugewiesen wird? Ich kann meine eigenen Accessoren erstellen, aber das könnte eine Menge Arbeit sein, wenn es viele Eigenschaften gibt, die ich ändern möchte ...
Danke für etwaige Antworten.
KVO wird ausgelöst, wenn ein Setter (oder ein anderer Mutator) aufgerufen wird. Es gibt keine zusätzliche Überprüfung. Im Allgemeinen ist KVO extrem leicht und leistungsempfindlich. Da unnötige Änderungen typischerweise selten und in den meisten Fällen für den Beobachter harmlos sind, enthalten sie nicht den zusätzlichen Aufwand, den alten Wert zu überprüfen. Das Überprüfen des vorherigen Werts könnte teuer sein, zum Beispiel, wenn ein verwaltetes Objekt nicht fehlerhaft war, so dass eine Menge Arbeit, nur um diesen Fall zu überprüfen, kein Standardverhalten ist.
Wenn Sie überprüfen möchten, wie sich der Wert geändert hat oder nicht, können Sie dies als Beobachter tun, indem Sie die Optionen NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld
übergeben. Sie erhalten dann sowohl die neuen als auch die alten Werte und Sie können entscheiden, ob Sie mit diesen Informationen etwas anfangen wollen. Ich habe in der Praxis festgestellt, dass dies jedoch nicht sehr oft benötigt werden sollte.
Nur als Referenz, um diese Logik dem Setter hinzuzufügen (mit manueller Änderungsbenachrichtigung), würden Sie verwenden:
%Vor%Tags und Links ios cocoa key-value-observing