Memory leak de subscription no RxJS
Pergunta
Por que uma subscription de Observable não gerenciada vira memory leak num componente Angular, e quais as formas idiomáticas de evitar?
Resposta esperada
Se você chama `.subscribe()` e o Observable é de vida longa (um store, um event stream, `interval`), o callback mantém referências ao componente vivo mesmo depois dele ser destruído — o garbage collector não recolhe, e a lógica continua rodando. Formas de evitar: preferir o `async` pipe no template, que se inscreve e cancela sozinho no ciclo de vida; `takeUntilDestroyed()` (Angular moderno) ou `takeUntil(this.destroy$)` com um Subject emitido no `ngOnDestroy`; ou guardar as subscriptions e chamar `unsubscribe()` no `ngOnDestroy`. Observables que completam sozinhos (`HttpClient` faz uma emissão e completa) não vazam, mas confiar nisso caso a caso é frágil — a regra é gerenciar sempre.
Por que perguntam isso
Pergunta pleno. Resposta forte prefere `async` pipe e `takeUntilDestroyed`, e sabe que HTTP completa sozinho mas não convém depender disso.