Ok, lassen Sie uns die folgende Klasse vorstellenWas ist die beste Methode und akzeptierte Methode zur Lösung dieses Threading- und Datenintegritätsproblems?
Nun, das tun wir ein Problem haben würde. Unsere Probleme sind in den Zeilen 58 & 65. Nehmen wir Zeile 58.
Wir wickeln Mutation unserer NSMutableArray in einem Dispatch_async Anruf in eine serielle Warteschlange. Wenn wir jedoch [self myMutableArray]
aufrufen, wird dispatch_sync an dieselbe serielle Warteschlange gesendet. Dieser Abfertigungscode wird niemals aufgerufen, da unser erster Abfertigungscode nicht zuerst abgeschlossen wird.
Was ist die ideale Lösung für dieses
1) entfernen - (NSMutableArray *)myMutableArray
und - (void)setMyMutableArray:(NSMutableArray *)myMutableArray
. Halten Sie alle Lesevorgänge in dispatch_sync in der seriellen Warteschlange und alle Schreibvorgänge in dispatch_async-Aufrufen in die serielle Warteschlange ... mit Ausnahme von Setter und Getter. Ist es üblich, den Setter und Getter niemals zu umbrechen?
Das ist eigentlich die einzige Lösung, glaube ich.
Also meine Frage ist ... ist es gängige Praxis, die Getter und Setter Interna in Versand in die serielle Warteschlange zu wickeln?