4

iPadアプリを開発しています。NSOperation を使用して、NSOperationQueue によって処理されたバックグラウンドで何かをダウンロードします。NSOperation に保持を追加しない限り、操作のアクションが実行された後にクラッシュすることがわかりました。NSOperationQueue の addOperation は、NSOperation を保持すると言い、NSOperation 自体はターゲット オブジェクトを保持します。したがって、追加の保持が必要な理由がわかりません。

非同期操作をキャンセルしてその場所に新しい操作を作成するパターンを実装しようとしていることを除いて、これは私の進歩を妨げません。iPhone OS 4.0 ではまだ開発できません (waitUntilFinished を提供します)。そのため、追加の保持を解放しても安全であることを知る別の方法が必要です (または、余分な保持をまったく行わないようにする方法を見つけます)。

助言がありますか?

4

2 に答える 2

1

「バックグラウンドで何かをダウンロードする」タスクをどのように実行していますか? NSOperation オブジェクトにコールバックする非同期メソッドを使用している場合は、おそらくそれが問題です。私の推測では、NSOperation のメイン メソッドでは、非同期メソッドを使用してダウンロードを開始しており、そのメソッドは後で NSOperation にコールバックすることになっています。問題は、メイン メソッドが返されると NSOperation が終了したと見なされるため、非同期ダウンロードが NSOperation をコールバックしようとすると、NSOperation が既に終了して割り当てが解除されているため失敗することです。あなたの追加の保持は、NSOperationQueueが終了した後でもNSOperationを維持することでこれを修正します。NSOperation 内で同期ダウンロード メソッドを使用して、これを修正する必要があります。

NSOperation で既に同期ダウンロード メソッドを使用している場合、何が問題なのかわかりません。

于 2010-06-28T19:02:46.863 に答える
0

フレームワーク ASIHTTPRequest ( http://allseeing-i.com/ASIHTTPRequest/ ) 内でキューと非同期要求を使用すると、NSOperationQueues と多くの非同期ダウンロードで発生していた多くの問題を解決するのに役立ちました。

問題が解決され、うまく解決された場合は、もう一度解決しようとしないでください。

于 2010-06-28T19:30:35.150 に答える