Also, wie in diese Antwort und in die iOS 4.0-Versionshinweise , UIKit hat jetzt einige thread-sichere Zeichenfunktionen:
Das Zeichnen in einem Grafikkontext in UIKit ist jetzt Thread-sicher. Speziell:
- Die Routinen, die verwendet werden, um auf den Grafikkontext zuzugreifen und ihn zu bearbeiten, können nun Kontexte, die sich auf verschiedenen Threads befinden, korrekt verarbeiten.
- Zeichenketten- und Bildzeichnung ist jetzt Thread-sicher.
- Die Verwendung von Farb- und Zeichensatzobjekten in mehreren Threads ist jetzt sicher möglich.
Das ist großartig, aber wie benutzt du es?
Soweit mir bekannt ist, können Sie, wenn Sie nicht in -drawRect:
sind, nur mit den UIKit / UIGraphics-Elementen zeichnen, wenn Sie Ihren eigenen Kontext über UIGraphicsBeginImageContext()
oder UIGraphicsPushContext()
erstellt haben, aber diese Funktionen sind nicht threadsicher gemäß den Dokumenten, und -drawRect()
wird immer am Hauptthread aufgerufen.
Ich nehme an, dass das Erstellen eines Bildkontextes im Hauptthread und das Starten der Hintergrundmethode aufgrund der rassenbedingten Bedingungen eine wirklich schlechte Idee wäre.
Also, wie verwende ich dieses Multithread-basierte UIKit-basierte Zeichenmaterial, das in iOS 4 eingeführt wurde? Welche anderen Möglichkeiten, einen aktiven UIKit-Grafikkontext zu erhalten, habe ich verpasst?
P.S. Ich weiß, dass ich nur mit Core Graphics zeichnen und damit fertig sein kann. Aus verschiedenen Gründen (Legacy-Code) möchte ich weiterhin die UIKit-basierten Zeichenmethoden verwenden.
Ich glaube, basierend auf einigen Erfahrungen, die es versuchen und basierend auf verschiedenen Dokumenten, dass die Dokumente für UIGraphicsPushContext()
nicht korrekt sind.
Ich glaube, UIGraphicsPushContext()
ist tatsächlich threadsicher. Das besondere Anzeichen, dass dies zutrifft, ist QA1637 , das sagt "Beginnend mit iOS 4.0 Das Zeichnen in einem Grafikkontext in UIKit ist Thread-sicher. Dazu gehören Zugreifen und Bearbeiten des aktuellen Grafikstapels , Zeichnen von Bildern und Zeichenfolgen sowie die Verwendung von Farb- und Zeichensatzobjekten aus sekundären Threads. " (Betonung meiner)
Ich erkenne an, dass es immer ein heikles Argument ist, Thread-Sicherheit im Widerspruch zu den Dokumenten anzunehmen. Aber ich glaube, das ist ein Dokumentationsfehler. Ich habe rdar: // 11161530 geöffnet, um es zu verfolgen. Bitte betrügen.