Release فقط برای TForm وجود داره؛ و علت وجودش هم این هست که اگر برنامه نویس خواست در یکی از Eventهای آن فرم، همان فرم را آزاد کند، به مشکل برنخورد.
یک Event توسط یکی از متدهای یک شی فراخوانی می شود، یعنی زمانی که کد آن Event در حال اجرا هست، شما عملا در داخل یکی از متدهای آن شی قرار دارید. مثلا اگر متد مربوطه به این شکل باشد:
procedure TMyClass.DoMyEvent;
begin
if Assigned(FMyEvent) then
FMyEvent(Self);
end;
در این صورت، در زمان اجرای FMyEvent شما همچنان در داخل متد TMyClass.DoMyEvent هستید.
حالا اگر در این کد شما TMyClass را آزاد کنید، عملا این متد را هم از بین می برید. به زبان ساده تر، این کار مثل آن است که شما شاخه ایی را که روی آن نشسته اید، اره کنید! معلوم هست که با این کار خودتان زمین می خورید.
از اونجایی که احتمال انجام همچین کاری برای فرم ها زیاد هست، کلاس TForm یک متد Release برای این کار فراهم کرده. این متد قبل از آزاد کردن فرم مطمئن می شود که هیچ Event-handler ایی در فرم در حال اجرا نباشد. اگر Event-handlerایی در حال اجرا بود، Release کنترل اجرا را بلافاصله به شما بر می گرداند، ولی در پشت صحنه فرم شما تا زمانی که اجرای آن Event-handler پایان نیافته، همچنان وجود دارد، و زمانی که اجرای آن کد پایان یافت، به طور خودکار آزاد می شود.