(Hinweis: Eigentlich ein iPhone-Projekt)
Ich habe gerade ein seltsames Verhalten beim KVO entdeckt, bei dem ich nicht weiß, ob/wie ich es verhindern kann.
Es gibt zwei Instanzen, die eine "ready"-Property enthalten, auf die ich einen Observer anmelde. Das habe ich deshalb gemacht, weil die beiden Klassen/Instanzen auf externe Hardware zurückgreifen, die ihrerseits eine "ich bin fertig"-Meldung als Delegate-Methoden-Aufruf absetzen. Wenn dieser Aufruf erfolgt, setze ich die "ready"-Property auf YES und der Observer klingelt.
In der Observer-Methode werden ein paar Werte gesetzt, z.B. das Objekt an ein Array gehangen usw., aber auch in der observierenden Instanz eine Property mit einem setter aktualisiert. Das heißt, dass der Observer an dieser Stelle verlassen wird (in den Mainloop zurückkehrt) und danach eigentlich noch einige Werte gesetzt werden sollen. Nun scheint aber parallel, während ich in der Observer-Methode meine Initialisierungen vorgenommen habe, die zweite Instanz ihre Fertigmeldung abgeliefert zu haben. Folge: Der Observer klingelt wieder und fängt für diese Klasse auch mit der Arbeit an.
Was nun passiert, ist aber merkwürdig: Ich hätte erwartet, dass der Stack sauber runtergearbeitet wird, also v.a. der erste setter-Aufruf (s.o.) irgendwann beendet wird, in die Observer-Methode zurückkehrt und dort der Rest des ersten "Klingelns" erledigt - tut er aber nicht! Vielmehr scheint es so zu sein, dass der zweite Observer-Impakt den ersten ersatzlos überschrieben hat. Alles, was nach dem Setter-Aufruf zur ersten Instanz käme, wird nicht (nie!) mehr durchlaufen - das kann ich mit BPs nachweisen. Damit funktioniert natürlich der Spaß nicht mehr richtig, denn es fehlen einige Schritte.
Mach ich was falsch, verstehe ich was falsch, oder ist das ein Feature?!
Ich habe gerade ein seltsames Verhalten beim KVO entdeckt, bei dem ich nicht weiß, ob/wie ich es verhindern kann.
Es gibt zwei Instanzen, die eine "ready"-Property enthalten, auf die ich einen Observer anmelde. Das habe ich deshalb gemacht, weil die beiden Klassen/Instanzen auf externe Hardware zurückgreifen, die ihrerseits eine "ich bin fertig"-Meldung als Delegate-Methoden-Aufruf absetzen. Wenn dieser Aufruf erfolgt, setze ich die "ready"-Property auf YES und der Observer klingelt.
In der Observer-Methode werden ein paar Werte gesetzt, z.B. das Objekt an ein Array gehangen usw., aber auch in der observierenden Instanz eine Property mit einem setter aktualisiert. Das heißt, dass der Observer an dieser Stelle verlassen wird (in den Mainloop zurückkehrt) und danach eigentlich noch einige Werte gesetzt werden sollen. Nun scheint aber parallel, während ich in der Observer-Methode meine Initialisierungen vorgenommen habe, die zweite Instanz ihre Fertigmeldung abgeliefert zu haben. Folge: Der Observer klingelt wieder und fängt für diese Klasse auch mit der Arbeit an.
Was nun passiert, ist aber merkwürdig: Ich hätte erwartet, dass der Stack sauber runtergearbeitet wird, also v.a. der erste setter-Aufruf (s.o.) irgendwann beendet wird, in die Observer-Methode zurückkehrt und dort der Rest des ersten "Klingelns" erledigt - tut er aber nicht! Vielmehr scheint es so zu sein, dass der zweite Observer-Impakt den ersten ersatzlos überschrieben hat. Alles, was nach dem Setter-Aufruf zur ersten Instanz käme, wird nicht (nie!) mehr durchlaufen - das kann ich mit BPs nachweisen. Damit funktioniert natürlich der Spaß nicht mehr richtig, denn es fehlen einige Schritte.
Mach ich was falsch, verstehe ich was falsch, oder ist das ein Feature?!