Вместо отслеживания того, какой вид отображается в данный момент, используйте UINavigationController. Вот для чего они. В applicationDidFinishLaunching в вашем приложении делегат:
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:startViewController];
Создайте переменную экземпляра в startViewController и передайте ей указатель на контроллер навигации после его создания. Затем, когда вы хотите пойти в игру:
[self.navigationController pushViewController:gameViewController animated:YES];
или без анимации, что угодно. Вы также, вероятно, захотите скрыть панель навигации с помощью:
[self.navigationController setNavigationBarHidden:YES animated:NO];
Когда игра заканчивается, вы можете продолжать нажимать любые просмотры, которые хотите, и вы всегда можете вернуться к первому просмотру с помощью:
[self.navigationController popToRootViewControllerAnimated:YES];
Да, а что касается повторной инициализации игры каждый раз, когда вы играете, просто введите
-(void)viewWillAppear:(BOOL)animated{}
в контроллере вида игры и делай любую инициализацию, какую захочешь. Хотя, честно говоря, я не на 100% уверен, что вы должны использовать это с .xib ... Я редко использую Interface Builder, поэтому я не уверен. Но я думаю, что это сработает.