EXC ПЛОХОЙ ДОСТУП из CoreGraphics API в NSOperation - PullRequest
0 голосов
/ 09 января 2011

Я пытаюсь выполнить некоторые манипуляции с CoreGraphics / CoreImage внутри NSOperation, используя MacRuby. У меня есть несколько вызовов API, которые читают исходный файл в CG и настраивают CGImageDestination.

Если я добавлю следующий код в NSOperation.init, все будет отлично работать:

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

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

Но если я помещаю тот же код в основную функцию для NSOperation, я получаю единичные ошибки EXC_BAD_ACCESS. И только при передаче NSOperation к NSOperationQueue; если я сам вызываю main, все работает просто отлично.

В конце основной я бегу:

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

Даже странно, что он работает в init, даже если init не вызывается из основного потока (так что, я думаю, это не проблема основного потока / фонового потока)

Есть мысли?

1 Ответ

1 голос
/ 21 марта 2011

Похоже, что один из ваших потоков ссылается на объект, который больше не существует в памяти.Попробуйте удалить

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

и посмотрите, как это происходит.Также вы можете попробовать проверить свои объекты в каждой очереди, чтобы увидеть, доступны ли они по-прежнему.Наконец, вы можете использовать macrubyd, отладчик для MacRuby, чтобы увидеть, что происходит, или даже использовать GDB и вставить обратную трассировку, чтобы мы могли увидеть, в чем проблема.* Мэтт

...