V3208. Unity Engine. Using 'WeakReference' with 'UnityEngine.Object' is not supported. GC will not reclaim the object's memory because it is linked to a native object.
Анализатор обнаружил использование экземпляра класса 'UnityEngine.Object' или его подкласса вместе с 'System.WeakReference'. Из-за неявного использования экземпляра самим движком поведение слабой ссылки может отличаться от ожидаемого.
Рассмотрим пример:
WeakReference<GameObject> _goWeakRef;
void UnityObjectWeakReference()
{
var go = new GameObject();
_goWeakRef = new WeakReference<GameObject>(go);
}
В данном примере создается слабая ссылка на объект класса 'GameObject'. Даже если вы не создавали сильных ссылок на этот объект, сборщик мусора не сможет очистить его. Свойство 'IsAlive' у 'WeakReference' или результат метода 'TryGetTarget' у 'WeakReference<T>' будут иметь значение 'true' даже после уничтожения объекта при помощи метода 'Destroy' или 'DestroyImmediate'.
Больше информации об этом можно прочитать в документации Unity.
При обнаружении подобного использования 'WeakReference' стоит произвести рефакторинг кода для исключения использования слабой ссылки вместе с 'UnityEngine.Object' или его подклассами.
Так же анализатор выдаёт предупреждение, когда при помощи метода 'WeakReference.SetTarget' в качестве аргумента передают экземпляр класса 'UnityEngine.Object' или его подкласса.
Данная диагностика классифицируется как: