iOS: Core Image und Multi-Threaded-Apps

Ich versuche, einige Kernbildfilter so effizient wie möglich auszuführen. Ich versuche, Speicherwarnungen und Abstürze zu vermeiden, die beim Rendern großer Bilder auftreten. Ich schaue mir den Core Image Programming Guide von Apple an. In Bezug auf Multithreading heißt es:"Jeder Thread muss seine eigenen CIFilter-Objekte erstellen. Andernfalls könnte sich Ihre App unerwartet verhalten."

Was bedeutet das?

Ich versuche tatsächlich, meine Filter auf einem Hintergrund-Thread auszuführen, damit ich ein HUD auf dem Haupt-Thread ausführen kann (siehe unten). Ist das im Zusammenhang mit coreImage sinnvoll? Ich erfahre, dass das Kernimage von Natur aus GCD verwendet.

//start HUD code here, on main thread

// Get a concurrent queue form the system
dispatch_queue_t concurrentQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^{

    //Effect image using Core Image filter chain on a background thread

    dispatch_async(dispatch_get_main_queue(), ^{

        //dismiss HUD and add fitered image to imageView in main thread

    });

});

Weitere Informationen zu Apple Docs:

Aufrechterhaltung der Thread-Sicherheit

CIContext- und CIImage-Objekte sind unveränderlich, was bedeutet, dass jedes Objekt sicher von mehreren Threads gemeinsam genutzt werden kann. Mehrere Threads können dasselbe GPU- oder CPU-CIContext-Objekt zum Rendern von CIImage-Objekten verwenden. Dies ist jedoch nicht der Fall für CIFilter-Objekte, die veränderbar sind. Ein CIFilter-Objekt kann nicht sicher zwischen Threads geteilt werden. Wenn Ihre App über mehrere Threads verfügt, muss jeder Thread seine eigenen CIFilter-Objekte erstellen. Andernfalls könnte sich Ihre App unerwartet verhalten.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage