28817
storyboardの構成は以下です。  
[![画像の説明をここに入力](https://i.stack.imgur.com/xerVQ.png)](https://i.stack.imgur.com/xerVQ.png)

破棄ボタンを押した時に下記の処理を入れています。

```

    let storyboard = UIStoryboard(name: "Main",bundle:nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("Top")
    UIApplication.sharedApplication().keyWindow?.rootViewController = vc
    
```

しかし、以下のようにもともと表示されていたviewの上に新たなwindowが作られてしまいます。  
[![3回破棄を繰り返した結果です。](https://i.stack.imgur.com/kADF9.png)](https://i.stack.imgur.com/kADF9.png)

もともとのviewControllerを解放して、topページに遷移させるには、上記コードをどのように書き換えればよいのでしょうか？

コメントいただいたコードを追加したところ、下記のようになりました。  
deinitは呼ばれ、解放はされました。  
[![画像の説明をここに入力](https://i.stack.imgur.com/VGl7M.png)](https://i.stack.imgur.com/VGl7M.png)

コードは以下のようにしました

```

    UIApplication.sharedApplication().keyWindow?.rootViewController?
    .dismissViewControllerAnimated(true, completion: nil)
    let storyboard = UIStoryboard(name: "Main",bundle:nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("FBLogin")
    UIApplication.sharedApplication().keyWindow?.rootViewController = vc
    
```
CC BY-SA 3.0
2016-09-11T03:12:42.790
28816
2016-09-11T04:50:18.780
2016-09-11T04:50:18.780
question
swift ios
破棄ボタンを押したタイミングで保持していたviewControllerを解放したい
iOSでの画面遷移はViewControllerをスタック状に積み重ねることで実現されています。RootViewControllerの子孫階層のViewControllerを解放してしまえば良いので、次のようなコードで実現できるはずです。お試しください。

```

        UIApplication.sharedApplication().keyWindow?.rootViewController?
            .dismissViewControllerAnimated(true, completion: nil)
    
```
CC BY-SA 3.0
2016-09-11T04:26:35.913
28817
2016-09-11T04:26:35.913
13972
28816
answer