Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


OnComponentRemovedAttribute

Declares a static method of a VisualElementComponentAttribute struct that runs when VisualElement.RemoveComponent removes the component from an element.
Read time 4 minutesLast updated 7 days ago

Definition

[AttributeUsage(AttributeTargets.Method, Inherited = false)]public class OnComponentRemovedAttribute : Attribute

Remarks

The method must be
static void M(ref T self, <see cref="UnityEngine.UIElements.VisualElement"></see> owner)
, and a component may declare at most one. It runs before the component storage is freed and before its
[RegisterCallback]
handlers are unregistered, so the method can still read its own live data and clean up any owner state the component configured.
It runs only on an explicit VisualElement.RemoveComponent or VisualElement.TryRemoveComponent call, immediately and inline, while the element is still alive. Does not run when the element is released, when its panel is torn down, or when it is garbage-collected. It is therefore not guaranteed to run for a given component instance.
Because the method receives the owning element, it may read its own state, touch that element, and add or remove components.
To free something the component allocated, use [ReleaseComponentResources] instead. That hook is guaranteed to run exactly once per component instance, on every release path: explicit removal, VisualElement.ReleaseResources, panel teardown, a recursive clear with VisualElementClearOptions.RecursiveReleaseResources, and garbage collection. Its call is deferred to the next
Collect()
on the main thread, where the element may already have been collected, so it receives only its own data and no element, and may do nothing beyond freeing what the component allocated.
Rule of thumb: if you allocated it, free it in [ReleaseComponentResources]. If you want to react to a user removing your component, use
[OnComponentRemoved]
. Never rely on
[OnComponentRemoved]
to release anything.

Inheritance

Inherited Members