8

Wird observeValueForKeyPath immer vom Haupt-Thread aufgerufen?Wird observeValueForKeyPath immer vom Hauptthread aufgerufen?

Ich Anmeldung Anrufe mit

-(void) observeValueForKeyPath:(NSString *)keyPath 
         ofObject:(id)object 
         change:(NSDictionary *)change 
         context:(void *)context 
{ 
    NSLog(@"KVO: isMainThread %d", [NSThread isMainThread]); 
    // ... 
} 

und es scheint 1 jedes Mal zu drucken, aber ich konnte keine Garantie dafür in der Dokumentation finden. Kann jemand bestätigen, dass dies der Fall ist?

Antwort

19

In der Regel keine.

Sie erhalten observeValueForKeyPath:ofObject:change:context: auf dem Thread, der den Wert geändert hat. Die Setter-Methode, die den Wert ändert, sendet die Nachricht an alle Beobachter nach der Aktualisierung des Werts und vor der Rückgabe.

Wenn Sie den Setter nur auf dem Hauptthread aufrufen, beobachten Sie nur die Änderung am Hauptthread.

+1

Fantastisch, danke – bcattle