UIGraphicsBeginImageContextWithOptions und Multithreading

Ich bin ein wenig verwirrt über UIGraphicsBeginImageContextWithOptions und threading, da nach UIKit-Funktion Referenz UIGraphicsBeginImageContextWithOptions sollte nur aufgerufen werden, auf dem Haupt-thread. Wenn man es schafft eine bitmap-basierten-Kontext, die bereit sind, manipuliert werden, entweder mit CoreGraphics' - Funktionen oder mit Methoden wie -drawInRect: für UIImage, -drawInRect:withFont: für NSString und so weiter. Für CoreGraphics' Zeichnung ist alles klar - Sie passieren eine CGContextRef argument, dass manipuliert wird, um jede Funktion, aber die UIKit-Zeichnung Methoden der aktuelle Kontext in dem Stapel. In den release notes der Was ist Neu in iOS 4.0 geschrieben, dass

Zeichnen auf einem Grafik-Kontext, in UIKit ist jetzt thread-safe. Insbesondere:

- Die Routinen für Zugriff und Manipulation von Grafiken

der Kontext kann jetzt richtig handle, die sich in unterschiedlichen Kontexten
Gewinde.
- String und Bild, die Zeichnung ist jetzt thread-safe.
- Über die Farbe und
font-Objekte in mehreren threads ist jetzt sicher zu tun.

So weit So gut. Der interessante Teil ist, dass ich ein Projekt, wo ich einige intensive Zeichnungen und erstellen mehrere Bilder erstellen Rahmen mit UIGraphicsBeginImageContextWithOptions, aber wenn diese Operationen geschehen zu sein, mehr Zeit in Anspruch und ich zog die Zeichnung in einem hintergrund-thread und wenn Sie bereit sind, zeigt Sie auf dem Bildschirm mit einigen Animationen und alles funktioniert wunderbar - keine Abstürze, keine Lecks. Bilder zeichnen, wie Sie erwartet werden und es scheint, dass UIGraphicsBeginImageContextWithOptions schafft einen Kontext für einen hintergrund-thread und alles scheint in Ordnung zu sein.

Also meine Fragen sind:

- Warum es notwendig ist, zu nennen UIGraphicsBeginImageContextWithOptions nur auf dem Haupt-thread, wie es scheint einwandfrei zu funktionieren im hintergrund?

- Wie zu verwenden UIImage's -drawInRect: Methode zum Beispiel in einem hintergrund-thread, wo ich keinen aktuellen Kontext und ich kann nicht scheinen, in der Lage sein, erstellen Sie eines, da kann ich nicht nennen UIGraphicsBeginImageContextWithOptions gibt es?

- Was ist der richtige Ansatz, um hintergrund-Bildbearbeitung mit UIKit Methoden (ich weiß, ich kann auch mit CGBitmapContextCreate, aber es weder drückt die erzeugten Kontext in der Kontext-Stapel noch ich scheinen in der Lage sein, es selbst zu tun, um -drawInRect: Methode der UIImage)?

InformationsquelleAutor graver | 2012-06-07
Schreibe einen Kommentar