私は、Webからの検索、インポート、ファイル操作など、多くの操作をバックグラウンドスレッドで実行しています。各操作はNSInvocationOperation
を使用して呼び出されます。各操作が完了すると、バックグラウンドスレッド操作はperformSelectorOnMainThread:
を呼び出します。私が使用しているモデルは、バックグラウンド操作の成功または失敗に応じて、背景スレッドがoperationSucceeded
またはoperationFailed
を呼び出すことです。メモリ管理ルールに違反することなく、NSErrorオブジェクトをバックグラウンドスレッドからメインスレッドに渡す方法はありますか?
operationFailed
を呼び出すと、NSError
オブジェクトをメインスレッドに戻して、スレッドがUIで適切な処理を実行できるようにしたいとします。たとえば、障害の場合、ユーザーにエラーメッセージを表示したい場合としない場合があります。
問題は次のとおりです。NSError
をメインスレッドに戻すにはどうすればよいですか? NSInvocationOperation
を使用して呼び出される各操作には、Appleの要件ごとにそれ自身のローカルNSAutoreleasePool
があります。 performSelectorOnMainThread:withObject:error
を使用してNSError
オブジェクトを返すと、ローカルNSAutoreleasePool
はNSError
オブジェクトを解放しませんか?
ああ...時々私はとてもばかげている。それは私の目の前にある。 "このメソッドは、セレクタが実行されるまで、受信者とargパラメータを保持します。"それは私が子供の頃のように感じる。私は引き出しの中で特定の靴下を探して見つけられませんでした。しかし、私のお母さんが来て、すぐに彼らを見ることができました。助けてくれてありがとう。 – jschmidt
全く問題ありません。それは誰にも起こります。結局、あなたはこのプログラミング状況であなたのお母さんのようになります! – Yuji