0

MacRuby를 사용하여 NSOperation 내에서 CoreGraphics/CoreImage 조작을 수행하려고합니다. CG로 소스 파일을 읽고 CGImageDestination을 설정하는 몇 가지 API 호출이 있습니다.EXC BAD 액세스 NSOperation의 CoreGraphics API에서

@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.init에 다음 코드를 삽입하면 모든 것이 잘 작동합니다. NSOperation을 NSOperationQueue에 전달할 때만; 내 자신을 main 호출하면 잘 작동합니다. 주의 끝에서

나는 실행하고 있습니다 :

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

심지어 낯선 사람이 초기화에서 작동되고, 초기화가 메인 스레드 (그렇게하지 메인 스레드/백그라운드 스레드에서 호출되지 않은 경우에도 문제, 나는 추측하고있다)

어떤 생각?

답변

1

스레드 중 하나가 더 이상 메모리에 존재하지 않는 개체를 참조하는 것 같습니다. 삭제하려고 시도하십시오.

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

그리고 어떻게되는지보십시오. 또한 각 큐의 개체를 확인하여 개체가 여전히 사용 가능한지 확인할 수도 있습니다. 마지막으로 Macrubyd를 사용하여 MacRuby의 디버거가 무슨 일이 일어나고 있는지 알아 보거나 GDB를 사용하여 역 추적을 붙여서 문제가 무엇인지 확인할 수 있습니다.

감사합니다,

  • 매트