Sobes.tech
Junior

Em qual fluxo o método init é executado?

sobes.tech IA

Resposta da IA

Principalmente, no thread de onde foi chamada a criação da instância. Não há restrição explícita para a execução de métodos init em um thread específico.

No entanto, deve-se considerar as características:

  • Main Actor: Se uma classe ou estrutura estiver marcada como @MainActor, sua inicialização será executada por padrão no thread principal, mesmo que a chamada para criar a instância venha de outro thread. Isso está relacionado ao Isolamento de Atores.

    @MainActor
    class MyClass {
        init() {
            // Este código é executado na thread principal, mesmo que chamado de um thread de fundo.
        }
    }
    
  • Uso de primitivas assíncronas: Async/await e outras ferramentas podem influenciar o contexto de execução, mas o método init em si permanece síncrono. Se dentro de init uma função assíncrona for chamada, a parte assíncrona será executada no contexto correspondente (por exemplo, no pool de threads padrão para await), mas o código antes e depois de await em init será executado na thread onde init começou.

  • UIKit/AppKit: Alguns componentes de UI devem ser usados apenas na thread principal. A inicialização desses componentes (por exemplo, UIView) deve ocorrer na thread principal, caso contrário, podem ocorrer erros ou comportamentos incorretos.

Na maioria dos casos, se não houver restrições explícitas (como @MainActor) ou interação com a UI, init simplesmente é executado na thread de chamada. Se for necessário realizar trabalho assíncrono ou cálculos pesados durante a inicialização, é melhor mover essa lógica para fora de init e executá-la de forma assíncrona após a criação do objeto.