Cuando creas un objeto persistente, asignándole un Owner, por ejemplo:
Código:
procedure TForm1.CrearControles;
begin
{Es dueño será la instancia de TForm1}
with TButton.Create(Self) do
begin
Parent := Self;
Caption := 'Mi Botón';
...
end;
end;
Cuando se destruya la instancia de TForm1, se destruirá el Botón,
no al terminar el evento, cuando se haga destruya el owner!
Con respecto a usar nil, si puedes hacerlo, entonces nadie se encargará de eliminar tu objeto, por eso solo es recomendable si haces un Try..Finally inmediato. De todos modos, no es una práctica habitual en mi utilizar nil, suelo utilizar Application como Owner cuando un objeto persistente no pertenece en la lógica a nadie, para la práctica es casi lo mismo, porque cuando se destruye Application es cuando el proceso ha terminado y por lo tanto se liberará toda la memoria de este (Ha no ser que hagamos cosas raras).
Saludos!