Memory Leak with CIGaussianBlur und CoreImage

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Memory Leak with CIGaussianBlur und CoreImage

    Hallo zusammen,

    ich kämpfe seit geraumer Zeit mit einem Memory Leak das ich nicht finde. Vielleicht seht ihr mehr als ich!

    Ich habe eine Beispiel Anwendung beigefügt die nicht's weiteres macht, als dem UIView ein BlurredImage zu verpassen.
    Ich habe die apple Dokumentation gewälzt, verschiedene Versionen ausprobiert. Leider immer mit dem selben Ergebnis. Leak!

    Ich habe zudem gelesen das "CGImageRef" manuell released werden muss da es von ARC nicht behandelt wird.
    Ich vermute das ich mit CIImage gleich verfahren muss oder? Finde aber nichts ob ARC sich darum kümmert!

    1000 Dank im voraus.

    Grüsse David
    Dateien
    • BlurredImage.zip

      (393,53 kB, 296 mal heruntergeladen, zuletzt: )
  • Hallo mattik

    mattik schrieb:

    Und: Warum gehst Du überhaupt den Weg über das CGImage. Nicht probiert, aber eigentlich müsstest Du das UIImage direkt vom CIImage erzeugen können?


    diesen Weg habe ich auch probiert, gleiches Ergebnis. Leak. Zudem verschiebt mir der direkte weg über CIImage den Layer auf dem View. Gut das kann man sicherlich anderweitig verhindern...

    @macmoonshine --> wie bzw. wo in Instrument siehst Du die Methoden die das ganze auslösen. Ich sehe nur Responsible libary CoreImage und den Fehlercode dahinter....
    Wie bekomme ich nun heraus welche instance nicht gelöst wird? Siehe Anhang. Wenn ich das Richtig Interpretiere entsteht das Leak an Punkt 8. Die Instanzen zuvor werden freigeben, der letzte jedoch nicht. Und CoreImage kann nur was mit dem CIImage zu tun haben.

    Hmmm.... bin grad etwas ratlos wo ich noch suchen soll. Es scheint als erzeugt CIImage einen RetainCount +1 gibt ihn aber am ende der Übergabe nicht frei.
    Dateien
    • instrument.png

      (87,35 kB, 297 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DaveOSX ()

  • OK, dachte Du siehst eine meiner Methoden dort .... sorry
    ... und wie würdest Du jetzt weiter verfahren um den Fehler zu finden?
    Was ich eingrenzen konnte ist, immer wenn ich CIImage in ein CGImageRef umwandle oder CIImage in ein UIImage entsteht ein Leak.
    Wenn ich diese Umwandlung aus kommentiere ist alles I.O.

    Bis hier her alles OK

    Quellcode

    1. CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
    2. [filter setValue:inputImage forKey:kCIInputImageKey];
    3. [filter setValue:[NSNumber numberWithFloat:5.0f] forKey:@"inputRadius"];
    4. CIImage *result = [filter valueForKey:kCIOutputImageKey];


    hier entsteht das leak

    Quellcode

    1. CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];
    2. // oder bei CIImage in UIImage
    3. UIImage *image = [[UIImage alloc]initWithCIImage:result];



    1000 Dank im vor raus

    Grüsse Dave
  • macmoonshine schrieb:

    Wenn es auch mit mattiks Lösung tropft, liegt es höchstwahrscheinlich nicht an Deinem Code.


    der Gedanke gefällt mir ..... :)

    Habe zwar derzeit noch keine Erklärung zu diesem Leak gefunden, Apple scheint aber eine neuere Version zum Blur Effekt zu präsentieren. Habe unter folgendem Link eine neuere Version gefunden mit der man schöne Blur Effekt saubern kann

    https://developer.apple.com/downloads/download.action?path=wwdc_2013/wwdc_2013_sample_code/ios_uiimageeffects.zip

    Einfach bei apple anmelden und Beispiel anschauen. ---- KEINE LEAKS !!!