UITabViewControllerとMemory Warning その2

Modal View表示時にMemory Warningが発生するとその下にある全てのviewControllerのviewDidUnloadデリゲートが呼ばれるのだが、そこでViewControlerが管理しているViewが解放されてしまっているらしい所までは解った。しかしどうやってそれを防ぐかが解らない。うーん。

Main含めて全てのUIViewController下のviewDidUnloadが呼ばれると共にModelViewの裏となっているViewがnilクリアされてしまうことは解った。

なのでそれを避ければこの現象自体は解消できる。

  • UIViewController.setView (viewプロパティのアクセサをオーバライド)
-(void)setView:(UIView*)view
{
    //memory warning時にnilがセットされてくるが、それは回避しないと現在のタブ下のViewが真っ黒いままになってしまう。
    if( view != nil )
    {
        [super setView:view];
    }
}

これで真黒黒助は解消されるが、このままだとViewが解放されて欲しい時も解放されずにメモリリークの元になってしまう。
なんらかの制御(例えばアプリケーション終了時はクリアできるようにする等)が必要だろう。