¿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
initen sí sigue siendo sincrónico. Si dentro deinitse 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 paraawait), pero el código antes y después deawaiteninitse 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.