Я читаю книгу с Design Patterns for Unity , и я узнал о "State Pattern". Любопытная вещь для меня - это то, что я впервые увидел этот шаблон, используемый с интерфейсами. Он делает все состояния, используя интерфейсы.
public class Ship : MonoBehaviour
{
private IShipState m_CurrentState;
private void Awake()
{
IShipState m_CurrentState = new NormalShipState();
m_CurrentState.Execute(this);
}
public void Normalize()
{
m_CurrentState = new NormalShipState();
m_CurrentState.Execute(this);
}
public void TriggerRedAlert()
{
m_CurrentState = new AlertShipState();
m_CurrentState.Execute(this);
}
public void DisableShip()
{
m_CurrentState = new DisabledShipState();
m_CurrentState.Execute(this);
}
public void LogStatus(string status)
{
Debug.Log(status);
}
}
Я не совсем понимаю, что происходит, когда переменная m_CurrentState "переинициализируется". Таким образом, мы в Awake делаем наш m_CurrentState как NormalShipState. Но когда мы запрашиваем изменение состояния этой переменной "m_CurrenState", что именно происходит? Я читал о сборке мусора и всех его этапах, а также о том, что он выпустит мертвые предметы, освобождая место для других предметов. Но что происходит с этим m_CurrentState, когда мы делаем вызов new ()?
Что происходит со старой памятью? Он будет собираться сборщиком мусора?
Производит новое выделение памяти каждый раз, когда я запрашиваю изменение состояния, и может вызвать переполнение памяти?