iOS: aplikacje Core image i aplikacje wielowątkowe

Próbuję uruchomić niektóre podstawowe filtry obrazu w najbardziej efektywny sposób. Próbuję uniknąć ostrzeżeń i awarii pamięci, które otrzymuję podczas renderowania dużych obrazów. Patrzę na Przewodnik po programowaniu obrazu Core firmy Apple. Jeśli chodzi o wielowątkowość, mówi:„każdy wątek musi tworzyć własne obiekty CIFilter. W przeciwnym razie aplikacja może zachowywać się nieoczekiwanie”.

Co to znaczy?

Próbuję uruchomić moje filtry na wątku w tle, więc mogę uruchomić HUD na głównym wątku (patrz poniżej). Czy ma to sens w kontekście coreImage? Rozumiem, że obraz rdzenia z natury wykorzystuje GCD.

//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

    });

});

Więcej z Apple Docs:

Utrzymanie bezpieczeństwa nici

Obiekty CIContext i CIImage są niezmienne, co oznacza, że ​​każdy może być bezpiecznie dzielony między wątkami. Wiele wątków może używać tego samego obiektu CIContext GPU lub CPU do renderowania obiektów CIImage. Jednak nie dotyczy to obiektów CIFilter, które są zmienne. Obiekt CIFilter nie może być bezpiecznie udostępniany między wątkami. Jeśli Twoja aplikacja jest wielowątkowa, każdy wątek musi tworzyć własne obiekty CIFilter. W przeciwnym razie aplikacja może zachowywać się nieoczekiwanie.

questionAnswers(1)

yourAnswerToTheQuestion