Meine Mac OSX-Anwendung verfügt über einen Hintergrundprozess, bei dem 2D-Linien und -Bereiche mithilfe von Core Graphics in eine CGLayer
gezeichnet werden. Diese wird dann über die displayRect()
Methode eines NSView
Subklasse an den Benutzer periodisch angezeigt.Müssen Lese-/Schreibzugriffe auf einen CGLayer in OSX serialisiert werden?
Im Moment verwende ich eine GCD-Warteschlange, um die Aufgaben zu serialisieren, die auf der Ebene lesen und schreiben. Dadurch wird sichergestellt, dass der Hintergrundprozess nicht gleichzeitig mit dem Hauptprozess gezeichnet werden kann, wenn der Hauptprozess ihn mit CGContextDrawLayerAtPoint()
in die Ansicht zeichnet. Das kostet mich jedoch etwas Leistung.
Frage 1: Ist die Serialisierung von R/W-Zugriffen auf die CGLayer
notwendig für die Stabilität der App? (Ich habe nichts gegen das seltsam falsch dargestellte Bild, aber ich möchte keinen Absturz riskieren).
Frage 2: Wenn ich die Zeichnungsaufgabe in mehrere gleichzeitige Prozesse aufteilen würde, wäre es sicher, sie alle gleichzeitig auf die Ebene schreiben zu lassen oder müsste ich sie serialisieren (was das machen würde die Nebenläufigkeit Art von sinnlos)?