variable strong stored lazy ios multithreading swift core-data

ios - strong - variable lazy



Swift-¿es lazy var var thread-safe? (1)

Tal vez esta pregunta requiera un poco de contexto.

He estado trabajando en mi capa de persistencia utilizando Core Data y descubrí que Core Data no es seguro para subprocesos y, por lo tanto, requiere que NSManagedObjectContext esté confinado a cada subproceso solo.

Así que mi enfoque es crear un subproceso de fondo personalizado NSManagedObjectContext que ejecuta la búsqueda, el guardado, etc., y también para crear el subproceso principal NSManagedObjectContext que se utilizará para obtener NSManagedObject de NSManagedObjectId y pasarlo al método de llamador.

De forma predeterminada, Xcode genera un código de plantilla relacionado con los datos principales utilizando lazy var para todos los NSManagedObjectContext , NSManagedObjectModel , etc.

Entonces mi pregunta es si

utilice el enfoque de creación de instancias de lazy var para crear NSManagedObjectContext , siempre que lazy var inicie un objeto para cada subproceso que intente acceder (¿no es seguro para subprocesos?)

o

declare las variables separadas para NSManagedObjectContext en cada subproceso y haga que todos los métodos relacionados con subprocesos hagan referencia a dos NSManagedObjectContext diferentes siempre que lazy var sea ​​seguro para subprocesos (?) y se cree solo una vez cuando se acceda sin importar el subproceso.

¡Gracias de antemano!

editar: Cualquiera que esté luchando con el problema de concurrencia de Data Core, este artículo presenta un patrón de diseño muy agradable para trabajar, como lo señala Aaron en el comentario a continuación.


lazy var no es segura para subprocesos. Puede usar dispatch_once , una constante ( let ) o el patrón de estructura anidado (generalmente utilizado para singletons) para seguridad de subprocesos. También puede emplear su propio bloqueo utilizando NSRecursiveLock pero probablemente no sea tan eficiente como dispatch_once .