Impedir el acceso a UIViewControllers con el controlador de la barra de pestañas (storyboard)

Actualmente me encuentro con un problema con mi aplicación iOS.
Estoy intentando incorporar un patrón de inicio de sesión gradual, es decir: el uso puede acceder a algunas aplicaciones sin que sea necesario iniciar sesión.

Las características requeridas son las siguientes:

En todo momento el usuario puede ver todos los elementos de navegación que requieren inicio de sesiónCuando el usuario intente acceder a una uiview (controlador) que requiere inicio de sesión, se le solicitará una UIAlertView que le solicitará que inicie sesión. (Preferiblemente, la UIAlertView aparecerá cuando la aplicación reconozca que el destino de inicio iniciado está restringido).

Al principio usé una subclase de UIViewController que, en el inicializador designado (initWithCoder), verificaba NSUserDefaults para ver si el usuario había iniciado sesión. Luego hice una subclase de eso. Las limitaciones fueron las siguientes:

No se pudieron usar otras subclases de UIViewController, concretamente UITableViewControllerEl UIAlertView apareció después de que apareciera la vista, que supongo que causaría errores si el UIViewController subclasificado asumiera que el usuario había iniciado sesión.

Resumen de la pregunta:
Me gustaría saber cómo evitar condicionalmente que los usuarios accedan a ciertas UIView (Controlador) y subclases de UIViewController, y cuando eso ocurra presente un UIAlertView.

Actualización 1
¿Podrían las categorías y / o protocolos ser una solución viable?

Actualización 2
CodaFi señaló a los singletons como una gran solución para administrar el estado del usuario.

Con eso implementado, ahora tengo que averiguar cómo controlar el acceso del usuario.
Cuando estoy utilizando guiones gráficos, creo que la implementación más versátil sería subclasificar UIStoryboardSegue y, en el método de ejecución, verificar si el usuario está intentando acceder a un UIViewController restringido (tal vez los controladores restringidos tienen una propiedad de protocolo que especifica el estado requerido: conectado / afuera). Sin embargo, el problema aquí es que no puede elegir la clase / subclase de un UIStoryboardSegue en el editor gráfico del guión gráfico. Soy consciente de que podría hacerlo de manera programática, sin embargo, me parece tedioso, ya que tendría que agregar IBActions y así a los métodos que realizan los segues, además, no creo que funcione con la forma en que se comportan elementos como navigationController y tabbarControllers.

¿Alguien tiene una solución viable para restringir la navegación del usuario?

Actualización 3
He agregado una respuesta a esta pregunta, sin embargo, todavía la considero sin respuesta porque la respuesta que he escrito no tiene en cuenta los intervalos entre los controles de la barra de navegación. Sin embargo, puede ayudar a algunas personas.

Respuestas a la pregunta(2)

Su respuesta a la pregunta