私たちのアプリケーションには、実際にデータを入力するのに時間がかかる可能性のある、ネットワークでバックアップされたデータ ソースを持つ複数の UITableView があります。通常は次のようになります。
- ユーザーがビューをトリガーします。
- viewDidLoad で、ビューのデータソースが作成されます。
- モデルの -load メソッドが呼び出されます
- モデルは、データを取得するためにネットワーク リクエストを発行します ...
- リクエストが終了する前に、ユーザーはビューを取り消します。
- ビューの ViewWillDisappear、ViewDidDisappear、ViewDidUnload、および dealloc メソッドが呼び出されます。
- リクエストが終了します。残念ながら、テーブル ビューの全部または一部が失われているため、大混乱が生じます。
したがって、私たちの解決策は、データ ソースを適切に「破棄」し、未処理のネットワーク リクエストをキャンセルして、これが起こらないようにすることでした。私が持っている質問は次のとおりです。
データ ソースを破棄する「適切な」方法は何ですか? それへのすべての参照を失い、未処理のネットワーク要求をキャンセルするために -dealloc を使用しますか?
どこで壊すべきですか?ViewDidUnload で? 解放?
実際、同じ 2 つの質問がモデルにも当てはまります。モデルを破棄する正しい方法は何ですか? そしていつ?
これはネットワーク リクエストだけに適用されるわけではないことに注意してください。Geolocation を使用する別のビューがあり、Geolocation 完了ブロックが呼び出されるまでに、更新されるはずのビューがなくなってしまうことがあります。
ありがとう!
PS 追加の質問:
- UITableView の場合、UITableView の -dealloc が呼び出される前に、ビュー内の行の割り当てが解除される可能性はありますか? たとえば、ViewWillDisappear 時にそれらの割り当てが解除され、その後たまたま -dealloc の前にリクエストが終了した場合、リクエストがたまたま UITableView 行を更新しようとすると、大混乱が起こります。
それは理にかなっていますか?