// in LoginViewController homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil]; UIWindow *window = [UIApplication sharedApplication].keyWindow; [[window subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; [window addSubview:homeViewController.view]; [homeViewController release]; // in HeaderView (a UIView subclass), which HomeViewController adds LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; UIWindow *window = [UIApplication sharedApplication].keyWindow; [[window subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; [window addSubview:loginViewController.view]; [loginViewController release]; // this won't work. it says *** -[LoginViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x1db2a0