﻿# 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'\. Из\-за неявного использования экземпляра самим движком поведение слабой ссылки может отличаться от ожидаемого\.

Рассмотрим пример: 

```cpp
WeakReference<GameObject> _goWeakRef;
void UnityObjectWeakReference()
{
  var go = new GameObject();
  _goWeakRef = new WeakReference<GameObject>(go);
}
```

В данном примере создается слабая ссылка на объект класса 'GameObject'\. Даже если вы не создавали сильных ссылок на этот объект, сборщик мусора не сможет очистить его\. Свойство '[IsAlive](https://learn.microsoft.com/en-us/dotnet/api/system.weakreference.isalive?view=net-7.0#system-weakreference-isalive)' у 'WeakReference' или результат метода '[TryGetTarget](https://learn.microsoft.com/en-us/dotnet/api/system.weakreference-1.trygettarget?view=net-7.0#system-weakreference-1-trygettarget(-0@))' у 'WeakReference<T\>' будут иметь значение 'true' даже после уничтожения объекта при помощи метода 'Destroy' или 'DestroyImmediate'\.

Больше информации об этом можно прочитать в [документации Unity](https://docs.unity3d.com/2022.2/Documentation/Manual/overview-of-dot-net-in-unity.html)\.

При обнаружении подобного использования 'WeakReference' стоит произвести рефакторинг кода для исключения использования слабой ссылки вместе с 'UnityEngine\.Object' или его подклассами\.

Так же анализатор выдаёт предупреждение, когда при помощи метода 'WeakReference\.SetTarget' в качестве аргумента передают экземпляр класса 'UnityEngine\.Object' или его подкласса\.