nsoperationにおけるCoreGraphics APIからの不良アクセス
-
08-10-2019 - |
質問
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を使用してバックトレースを貼り付けて、問題が何であるかを確認することもできます。
ありがとう、
- マット
所属していません StackOverflow