0

MacRuby を使用して、NSOperation 内で CoreGraphics/CoreImage 操作を実行しようとしています。ソース ファイルを CG に読み込み、CGImageDestination を設定する API 呼び出しがいくつかあります。

次のコードを 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で動作することです(メインスレッド/バックグラウンドスレッドの問題ではないと思います)

何かご意見は?

4

1 に答える 1

1

スレッドの 1 つが、メモリに存在しないオブジェクトを参照しているようです。削除してみてください

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

そして、それがどうなるか見てください。また、各キュー内のオブジェクトを検証して、それらがまだ使用可能かどうかを確認することもできます。最後に、MacRuby のデバッガーである macrubyd を使用して何が起こっているかを確認するか、GDB を使用してバックトレースを貼り付けて、問題が何であるかを確認することもできます。

ありがとう、

  • マット
于 2011-03-21T05:43:50.283 に答える