2010-12-04 3 views
0

私は、Webからの検索、インポート、ファイル操作など、多くの操作をバックグラウンドスレッドで実行しています。各操作はNSInvocationOperationを使用して呼び出されます。各操作が完了すると、バックグラウンドスレッド操作はperformSelectorOnMainThread:を呼び出します。私が使用しているモデルは、バックグラウンド操作の成功または失敗に応じて、背景スレッドがoperationSucceededまたはoperationFailedを呼び出すことです。メモリ管理ルールに違反することなく、NSErrorオブジェクトをバックグラウンドスレッドからメインスレッドに渡す方法はありますか?

operationFailedを呼び出すと、NSErrorオブジェクトをメインスレッドに戻して、スレッドがUIで適切な処理を実行できるようにしたいとします。たとえば、障害の場合、ユーザーにエラーメッセージを表示したい場合としない場合があります。

問題は次のとおりです。NSErrorをメインスレッドに戻すにはどうすればよいですか? NSInvocationOperationを使用して呼び出される各操作には、Appleの要件ごとにそれ自身のローカルNSAutoreleasePoolがあります。 performSelectorOnMainThread:withObject:errorを使用してNSErrorオブジェクトを返すと、ローカルNSAutoreleasePoolNSErrorオブジェクトを解放しませんか?

答えて

1

何もする必要はありません。 referenceで説明したように、performSelectorOnMainThread:@selector(foo:) withObject:objはセレクタが実行されるまでobjを保持します。

+0

ああ...時々私はとてもばかげている。それは私の目の前にある。 "このメソッドは、セレクタが実行されるまで、受信者とargパラメータを保持します。"それは私が子供の頃のように感じる。私は引き出しの中で特定の靴下を探して見つけられませんでした。しかし、私のお母さんが来て、すぐに彼らを見ることができました。助けてくれてありがとう。 – jschmidt

+0

全く問題ありません。それは誰にも起こります。結局、あなたはこのプログラミング状況であなたのお母さんのようになります! – Yuji