Frage

Ich versuche, einige Core Graphics / Coreimage Manipulation innerhalb eines NSOperation zu tun, MacRuby verwenden. Ich habe ein paar API-Aufrufe, die eine Quelldatei in CG lesen und eine CGImageDestination einrichten.

Wenn ich den folgenden Code in eine NSOperation.init setzen, funktioniert alles super:

@dest = CGImageDestinationCreateWithURL(@photo.output_url, "public.jpeg" , 1, nil);
@context = CIContext.alloc.init

@cgOriginalImgSrc = CGImageSourceCreateWithURL(@photo.url, nil)
@cgOriginal       = CGImageSourceCreateImageAtIndex(@cgOriginalImgSrc, 0, nil)    

Aber wenn ich den gleichen Code in die Hauptfunktion für die NSOperation setzen, bekomme ich sporadisch EXC_BAD_ACCESS Fehler. Und erst, wenn das Bestehen der NSOperation zu einem NSOperationQueue; wenn ich invoke Haupt mir, es funktioniert ganz gut.

Am Ende der Haupt Ich bin mit:

CFRelease(@dest)    
CFRelease(@cgOriginalImgSrc)
CGImageRelease(@cgOriginal)

Noch seltsamer ist, dass es in init funktioniert, auch wenn init nicht von dem Haupt-Thread aufgerufen wird (also nicht ein Haupt-Thread / Hintergrund-Thread Problem, vermute ich)

Alle Gedanken?

War es hilfreich?

Lösung

Sieht aus wie eines Ihrer Themen bezieht sich auf ein Objekt, das nicht mehr im Speicher vorhanden sind. Versuchen Sie das Entfernen

CFRelease(@dest)    
CFRelease(@cgOriginalImgSrc)
CGImageRelease(@cgOriginal)

Und sehen, wie es geht. Sie können auch versuchen, Ihre Objekte in jeder Warteschlange zu überprüfen, um zu sehen, ob sie noch verfügbar sind. Schließlich könnten Sie macrubyd, den Debugger für MacRuby verwenden, um zu sehen, was los ist, oder sogar GDB verwenden und die Backtrace einfügen, damit wir sehen, was das Problem ist.

Danke,

  • Matt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top