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 .