シナリオは次のとおりです。
-UIViewController (A) がナビゲーション スタックにプッシュされます
-viewDidLoad で、AFNetworking (アプリケーション全体で共有されるシングルトン AFHTTPClient) を使用して非同期 GET が呼び出され、ビューにさまざまなユーザー要素 (UILabel など) が設定されます。
-リクエストが返される前にユーザーが戻るボタンを押した -
他のアクティブなView Controllerがリクエストを行っている可能性があるため、開いているすべての操作をキャンセルできないと仮定します
質問 #1 は、UIViewController A によって行われたオープン リクエストを追跡し、ユーザーがそのビューを離れたときに未処理のリクエストをキャンセルする必要があるか、またはそれらを終了させて無視する必要があるかということです。AFNetworking はブロックを使用するため、更新されるユーザー要素はブロック内に保持されるため、ビューがポップされた後に成功/失敗ブロックが実行されてもクラッシュは発生しません。ただし、それらを無視することの欠点は、不要なネットワーク トラフィックのようです。
質問 2 は、UIViewController A によって行われた操作をキャンセルするコードをどこで実行しますか? ユーザーが戻る (現在のビューをポップする) のではなく、進む (新しいビューをスタックにプッシュする) 可能性があるため、viewDidDisappear は正しくないようです。この場合、ユーザーが来る可能性があるため、開いている要求をキャンセルしたくない現在のビューに戻ると、再度読み込まれません。ただし、ブロックはユーザー要素を保持するため、リクエストの実行中に dealloc または viewDidUnload が呼び出されるとは思わないので、そこに行くことはできないと思います。
これについて考えていただければ幸いです。ベストプラクティスは何だと思いますか?