DEV Community

GoyesDev
GoyesDev

Posted on

[SC] Swift Concurrency y CoreData

Comprensión durante la lectura

El autor sugiere seguir las mejores prácticas con CoreData. Para ello, pone un repositorio a disposición y una serie de artículos.

¿Por qué Core Data requiere acceso seguro a hilos (thread-safety)?

No se puede pasar un NSManagedObject de un hilo a otro.

¿Qué problema existe al pasar un managed object de un hilo a otro?

Un NSManagedObject estéa ligado al NSManagedObjectContext en el que fue creatdo y ese contexto solo es seguro usarlo desde el hilo en que fue creado. Si paso el objeto a otro hilo y acceso a sus propiedades puede ocurrir:

  • Corrupción de datos silenciosa.
  • Fallas impredecibles en tiempo de ejecución.
  • Condiciones de carrera.

La solución tradicional es pasar solo el NSManagedObjectID entre hilos y refetch del objeto en el contexto del hilo destino.

¿Por qué el autor habla de Core Data en lugar de SwiftData?

SwiftData está teniendo más soporte de Apple. CoreData parece un poco más "huérfano" y, además, es posible que haya muchos más proyectos usando esta biblioteca y gente teniendo problemas con ellos, que con SwiftData.

¿Qué limitaciones tiene Core Data al integrarse con Swift Concurrency?

  • NSManagedObject no es Sendable, lo que impide pasarlo entre actores o tareas concurrentes sin advertencias del compilador.
  • NSManagedObjectContext no es un actor, así que no garantiza automáticamente acceso serializado.
  • Métodos fundamentales como loadPersistentStores no tienen equivalente async/await nativo.
  • En modo estricto de concurrencia, muchas operaciones comunes de Core Data generan errores de compilación.

¿Qué API asíncrona ofrece NSManagedObjectContext para trabajar con async/await?

perform(schedule:_:)

¿Qué método de NSPersistentContainer no tiene una alternativa asíncrona todavía?

loadPersistentStores(completionHandler:)

¿Qué es el "persistent history tracking" y por qué se recomienda antes de migrar a Swift Concurrency?

El "persistent history tracking" es una funcionalidad de Core Data que registra todos los cambios realizados en el almacenamiento persistente en forma de transacciones (NSPersistentHistoryTransaction). Esto permite que distintos contextos, extensiones de app o procesos se enteren de cambios ocurridos mientras no estaban activos.

Se recomienda adaptarlo antes de migrar a Swift Concurrency porque:

  • Establece una base sólida para sincronizar cambios entre múltiples contextos.
  • Evita problemas de datos desactualizados cuando diferentes actores o tareas modifican el store simultáneamente.

Recordar sin releer

¿Puedes explicar con tus propias palabras por qué Core Data y Swift Concurrency no son totalmente compatibles aún?

¿Qué soluciones propone el autor para los casos en que Core Data no ofrece APIs asíncronas nativas?

¿Cuál es la postura del autor respecto al futuro de SwiftData en el curso?


Revisión y síntesis

¿Cuáles son las dos tecnologías principales que se integran en este módulo y cuál es el reto central entre ellas?

¿Qué recursos externos menciona el autor para profundizar o reportar problemas?

¿Qué conclusión puedes sacar sobre el estado actual de la adopción de Swift Concurrency en proyectos que usan Core Data?


Bibliografía

Top comments (0)