View Controller が解放されない原因を見つけるのに苦労しています。アプリの他のユーザーとのチャット (マイナーな機能) のみを目的としたサブページであるため、階層の最上部にのみ表示されます。
私はすでにインストゥルメントを使用してみましたが、私が見つけることができる唯一の情報は、保持の原因が UIKit - UIClassSwapper からの 1 つのカウントであるということです。これはあまり意味がありません。
コントローラー内で次を使用します。
- Realm - チャット履歴をローカルに保存
- Socket IO - メッセージのリアルタイム送受信
- UITableView+delegate - メッセージの表示
- UITextView+delegate - 入力メッセージ
- NotificationCenter - キーボードが表示/非表示になり、アプリがバックグラウンド/フォアグラウンドに入るときの動作
カスタム デリゲートは使用されず、self への明示的な強い参照がこのコントローラー内で使用されます。チャット バブルには、レイヤーを追加するカスタム描画コードがありますが、他のビューからの参照は必要ありません。
View Controller が保持される原因は何ですか?
これは、保持されている各ビュー コントローラーによってソケットがサーバーから送信されたイベントに応答するようになるため重要です。しばらくすると、各ユーザーが複数としてカウントされます。
コードの特定の部分がこの問題を引き起こす可能性が高いかどうかを言及してください。質問に追加します。View Controller全体は400行を超えるコードであり、私の質問に完全に含めることは現実的ではありません.
編集
inokey さんの提案を受けて、各部分を分解してデバッグしたところ、リテイン サイクルの原因は実際には Socket IO でした。removeAllHandlers()
また、Socket IO のドキュメントを読み直したところ、強い参照サイクルが発生する可能性のあるすべての参照を削除する方法があることがわかりました。
ドキュメントを注意深く読まなかったのは私の間違いです -.-