私のアプリケーションには、HTTP を介したサーバーへの通信をカプセル化するオブジェクトがあります。このオブジェクトは、セッションが無効になった場合やユーザーへの新しいメッセージがある場合など、サーバーに変更があった場合に「ポーリング」する HTTP リクエストを作成します。
アプリケーションの UI オブジェクトは、UI オブジェクトが実装するプロトコルを介して通知を受信するために、自身を通信オブジェクトに登録する必要があります。登録は次のような方法で行われます。
[communicationObject addObserver: self];
そしてそれ自体を削除するには:
[communicationObject removeObserver: self];
通信オブジェクトは、可変配列にオブザーバーを格納します。場合によっては、UI オブジェクトは、UINavigationController にプッシュされた UIViewControllers です。その場合、ユーザーが親コントローラーに戻ると、通信オブジェクトのオブザーバー配列が UI コントローラーを保持するため、UI コントローラーは破棄されず、deallocメソッドが呼び出されないため、UI コントローラーはオブザーバーから自身を削除できません。 (明らかに)。
質問: このオブザーバー通知機能は悪いデザイン パターンですか? viewWillDisappearメソッドを使用せずに、UI コントローラーが親コントローラーによって解放されたことを検出する方法はありますか? この種の状況に対処するためのベスト プラクティスはありますか?