これは悪い習慣かもしれませんが、私が読んだドキュメントから、場合によってはviewDidLoadメソッド内でオブジェクトを初期化し、viewDidUnloadでそれをゼロにするというアドバイスを得ました。
たとえば、オブザーバーを追加するようなものがある場合
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(filterready:)
name:@"filterReady"
object:nil];
現在、オブザーバーを削除するメソッドはありませんが、ビューが表示されるたびにviewDidLoadが呼び出されるため、しばらくすると複数のオブザーバーが実行され、セレクターが複数回呼び出されます。
いくつかのクリーナーをviewDidDisappearメソッドに移動することでこれを修正できますが、正しいことをしているのかどうか疑問があります。
私のサンプルでは、サブナビゲーションを制御している複数のナビゲーションコントローラーがありますが、参照されていなくても、deallocが呼び出されることはありません。