2010-11-22 7 views
1

私は別のダウンロードクラスによって処理される非同期にtableviewの各セルの画像の束を読み込むUIViewControllerサブクラスを持っています。私は、画像を要求しているセルのインデックスに合わせて、これらのダウンロード要求のすべてのリストを辞書に保存します。UIViewControllerにクリーンアップコードを入れる場所は?

私の質問は、viewcontrollerがnavcontrollerからポップされた場合、イメージのダウンロードをキャンセルするコードをどこに置くべきですか?私はこれを行う必要があります。なぜなら、ユーザーが静止画像がダウンロードされている間にヒットした場合(しばらく時間がかかるかもしれない)、viewcontrollerのダウンロードが完了したら、すでにリリースされているからです。

ユーザーが別のタブをクリックした場合、および戻るボタンを押したときだけダウンロードを停止したくないため、私はviewWillDisappearメソッドに入れません。今のところ私はviewcontrollers deallocメソッドでこのコードを入れてもうまくいけませんが、何らかの理由で正しいとは思われません。私はviewDidUnloadメソッドを使用すると思ったが、これは低メモリ警告がある場合にのみ呼び出されるようだ?

アイデア?

答えて

3

deallocは、ビューコントローラーの割り当てが解除され、あなたの物をきれいにする責任があるので、これには最適な場所です。あなたはそれが背景画像の負荷によって遅くされるロードされ、あなたがにナビゲートしている画面が何を必要とした後、すべての場合は、とにかくviewWillDisappear:にコードを置くことを検討する必要があり

+0

こんにちは、迅速な対応のためのTHX 。これには、辞書を列挙し、それに含まれる各オブジェクトのメソッドを呼び出すようなものが含まれていますか? deallocの中で[someobject release]以外のコードを見たことはありません。 – James

+2

一般に、-deallocは、以前に登録した任意の「デリゲートのような」ものの登録を解除する必要があります。 'foo.delegate = nil'と' [NSNotificationCenter defaultCenter] removeObserver:self] 'は特によく使われます。 -scrollToRect:animated:または-zoomToRect:animated:(それが呼び出されたものであれば) 'scrollView.delegate = nil'を設定する必要があります。スクロール・ビューがビュー階層にない場合でも、「アニメーション」は続きます。おそらく彼らはこれを修正しました... –

+0

@James deallocで行う必要のあるクリーンアップを行います。これは他のオブジェクトを呼び出すことも、現在の状態を保存することもできます。 – JustSid

0

...

関連する問題