Sobes.tech
Junior

¿En qué flujo se ejecuta el método init?

sobes.tech AI

Respuesta de la IA

Principalmente, en el hilo desde donde se llamó a la creación de la instancia. No hay una restricción explícita para la ejecución de métodos init en un hilo específico.

Sin embargo, se deben tener en cuenta las características:

  • Actor Principal: Si una clase o estructura está marcada como @MainActor, su inicialización se realizará por defecto en el hilo principal, incluso si la llamada a la creación de la instancia proviene de otro hilo. Esto está relacionado con el Aislamiento de Actores.

    @MainActor
    class MyClass {
        init() {
            // Este código se ejecuta en el hilo principal, incluso si se llama desde un hilo en segundo plano.
        }
    }
    
  • Uso de primitivas asíncronas: Async/await y otras herramientas pueden influir en el contexto de ejecución, pero el método init en sí sigue siendo sincrónico. Si dentro de init se llama a una función asíncrona, la parte asíncrona se ejecutará en el contexto correspondiente (por ejemplo, en el grupo de hilos predeterminado para await), pero el código antes y después de await en init se ejecutará en el hilo donde comenzó init.

  • UIKit/AppKit: Algunos componentes de UI deben usarse solo en el hilo principal. La inicialización de estos componentes (por ejemplo, UIView) debe realizarse en el hilo principal, de lo contrario, pueden surgir errores o comportamientos incorrectos.

En la mayoría de los casos, si no hay restricciones explícitas (como @MainActor) o interacción con la UI, init simplemente se ejecuta en el hilo desde el cual se llamó. Si es necesario realizar trabajo asíncrono o cálculos pesados durante la inicialización, es mejor mover esa lógica fuera de init y ejecutarla de forma asíncrona después de crear el objeto.