[viewController.view release]; //release gamestate
Это дополнительный релиз (если вы его не распределили, не выпускайте его). Пара строк вниз:
viewController.view = [[scene alloc] initWithFrame:CGRectMake(0, 0, IPHONE_WIDTH, IPHONE_HEIGHT) andManager:self];
снова выпустит viewController.view перед сохранением нового значения, что перезапустит представление и вызовет сбой (оно отправляет сообщение об освобождении объекту, который уже был освобожден / память уже освобождена) , Вместо этого попробуйте:
scene *view = [[scene alloc] initWithFrame:CGRectMake(0, 0, IPHONE_WIDTH, IPHONE_HEIGHT) andManager:self];
viewController.view = view; // setView will release the old/retain the new
[view release]; // so you don't need to worry about releasing it later