Pregunta

Estoy tratando de hacer un poco de manipulación CoreGraphics / CoreImage dentro de un NSOperation, utilizando MacRuby. Tengo un par de llamadas a la API que leen un archivo de origen en CG y establecer un CGImageDestination.

Si pongo el siguiente código en un NSOperation.init, todo funciona muy bien:

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

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

Pero si pongo el mismo código en la función principal de la NSOperation, recibo errores EXC_BAD_ACCESS esporádicos. Y sólo cuando se pasa el NSOperation a un NSOperationQueue; Si invoco principal a mí mismo, funciona muy bien.

Al final de la principal Me postulo:

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

Aún más extraño es que funciona en init, incluso si init no se invoca desde el hilo principal (por lo que no es un problema principal hilo de rosca / fondo, supongo)

¿Alguna idea?

¿Fue útil?

Solución

se ve como uno de sus hilos se refiere a un objeto que no existe en la memoria más. Prueba a eliminar

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

Y ver cómo va. También puede intentar verificar los objetos en cada cola para ver si todavía están disponibles. Por último, se puede usar macrubyd, el depurador de MacRuby para ver lo que está pasando, o incluso utilizar el BGF y pegar el trazado inverso para que podamos ver cuál es el problema.

Gracias,

  • Matt
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top