質問

MacRubyを使用して、Nsoperation内でコアグラフィック/コアイメージの操作を試みています。ソースファイルをCGに読み取り、CGimageStinationを設定する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で機能するということです(したがって、メインスレッド/バックグラウンドスレッドの問題ではなく、推測しています)

何かご意見は?

役に立ちましたか?

解決

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

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

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

ありがとう、

  • マット
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top