私はUIImagePickerControllerを使用して静止画像をキャプチャしています。次に、画像の異なるコピーをCore Dataストアに保存する前に、いくつかの処理作業を行う必要があります。処理と保存の作業はiPhone 4で4〜8秒かかることがあるので、バックグラウンドキューに作業を分けて、アプリ全体とUIがブロックされないようにしています。バックグラウンド処理のためにUIImagePickerControllerから画像データを渡す
私の質問の根源はこれです。 UIImageオブジェクトが完全にそのスレッドに限定されている限り、バックグラウンドスレッドでUIImageを使用できますか?私はapple's thread safety summaryでNSImageについて次のように見つけました。私はUIImageが同じように動作すると仮定しています。
NSImageでは制限:
1つのスレッドは、NSImageではオブジェクトを作成し、画像バッファに描画し、描画のためにメインスレッドにそれを渡すことができます。基礎となるイメージキャッシュはすべてのスレッドで共有されます。イメージとキャッシングの仕組みの詳細については、「Cocoa Drawing Guide」を参照してください。
誰でもこれを確認することができますか、メインスレッドの外側のUIImageオブジェクトのようなものに触れることは間違っていますか?限られたUIImageインスタンスを使用している場合は、別の問題が発生します。 UIImagePickerControllerはスレッドセーフであるNSDictionaryを返しますが、その中でNSDictionaryはUIImageオブジェクトです。その辞書を別のスレッドに渡してから、そのスレッド内のオブジェクトを使用するのは安全ですか?
imagePicker情報辞書のUIImageを使用するのが安全でない場合は、どのように処理するのが良いかに関する提案はありますか?
実際のコアデータスレッドの問題がわかったと思います。しかし、私は現在、NSValueTransformerを使ってイメージデータを書き込み、取得し、カスタムNSManagedObjectサブクラス内のNSDataとの間でUIImageを変換します。
お返事ありがとうございます。それは働いているようだ。私は前に試してみましたが、UIImageを渡すことができませんでした。私は、保持プロパティの代わりにコピーを使用している可能性があります。 –