El video se congela en el interruptor de la cámara con AVFoundation

He creado una aplicación con una función para capturar y guardar videos. He usado AVFoundation para eso y AVCam de Apple ha sido mi guía.

Espero poder aclararlo:
Todo funciona bien hasta que publico el videoViewController que maneja el AVCamCaptureManager por primera vez (en AVCam sería AVCamViewController). Después de eso, cuando lo creo nuevamente, el video se congela justo después del cambio de cámara. Incluso volver a ejecutar no ayudará, ni limpiará, ni restablecerá el dispositivo. (A veces, una de las cosas ayuda, pero no es una regla).

Libero el videoViewController cuando no es necesario para ahorrar memoria.

Code para cambiar la cámara es básicamente el mismo que en AVCam:

NSError *error;
AVCaptureDeviceInput *newVideoInput;
AVCaptureDevicePosition position = currentVideoInput.device.position;

if (position == AVCaptureDevicePositionBack)
    newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:frontFacingCamera error:&error];
else if (position == AVCaptureDevicePositionFront)
    newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error];

if (newVideoInput != nil) {
    [session beginConfiguration];
    [session removeInput:currentVideoInput];
    if ([session canAddInput:newVideoInput]) {
        [session addInput:newVideoInput];
        [self setVideoInput:newVideoInput];
} else {
    [session addInput:currentVideoInput];
}
    [session commitConfiguration];
    [newVideoInput release];
} else if (error) {
    NSLog(@"%@",[error localizedDescription]);
}

Code con el que descarto videoView

[self.videoViewController.view removeFromSuperview];
self.videoViewController = nil;

Mi "solución" actual es simplemente dejarlo así, incluso si no lo necesito.

Puede alguien explicar por qué sucede esto y cómo resolverlo.

EDIT: Resuelto
omo W Dyson señaló en su respuesta, debería haber detenido la sesión antes de lanzar mi videoViewController así:

[[[self.videoViewController captureManager] session] stopRunning];
[self.videoViewController.view removeFromSuperview];
self.videoViewController = nil;

Gracias W Dyson.

Respuestas a la pregunta(2)

Su respuesta a la pregunta