framework español iphone cocoa cocoa-touch core-data

iphone - framework - cocoa touch español



¿Es NSPersistentStoreCoordinator Thread Safe? (2)

Estoy trabajando en una aplicación para iPhone que usa Core Data. La aplicación hace una llamada a un servicio web, analiza el archivo XML resultante y luego crea o modifica los objetos de Datos principales en mi aplicación. Ya manejo la llamada al servicio web y el análisis de forma asíncrona, pero he estado devolviendo los datos analizados al hilo principal para manipular los objetos de Datos centrales. Me gustaría ejecutar este proceso en el hilo de fondo también. (Una pausa de 1-2 segundos no proporciona una gran experiencia de usuario)

El enfoque obvio sería crear un contexto de objeto gestionado específicamente para el hilo de fondo, pero luego leo esta línea en la Guía de programación de datos básicos de Apple :

Un coordinador de tienda persistente proporciona a sus contextos de objetos gestionados la fachada de una tienda virtual. Para operaciones completamente simultáneas necesita un coordinador diferente para cada hilo.

Así que aquí está el truco: no puede tener dos NSPersistentStoreCoordinator s que proporcionan acceso a la misma tienda. Sin embargo, el libro de datos básicos de Marcus Zarra afirma que NSPersistentStoreCoordinator es seguro para subprocesos y serializará las solicitudes de E / S (pág. 157).

¿Alguien puede aclararme esto? ¿Es posible tener un segundo contexto de objeto gestionado ejecutándose en un hilo separado compartiendo el mismo NSPersistentStoreCoordinator con el hilo principal? O, de manera más sucinta, ¿ NSPersistentStoreCoordinator es NSPersistentStoreCoordinator subprocesos?


¿Es posible tener un segundo contexto de objeto gestionado ejecutándose en un hilo separado compartiendo el mismo NSPersistentStoreCoordinator con el hilo principal?

¡Sí! Te recomiendo que leas detenidamente la sección correspondiente del libro de Zarra antes de aventurarte en el acceso de subprocesos a CoreData.

O, de manera más sucinta, ¿NSPersistentStoreCoordinator es seguro para subprocesos?

Bueno, la palabra ''thread-safe'' tiene matices de significado en el documento de Apple, ¡así que ten mucho cuidado! Vea este artículo en el blog para una buena explicación.


Zarra luego señala que el contexto bloquea la tienda, por lo que está bien usar el mismo NSPersistentStoreCoordinator en los subprocesos .

Aunque el NSPersistentStoreCoordinator tampoco es seguro para subprocesos, NSManagedObjectContext sabe cómo bloquearlo correctamente cuando está en uso. Por lo tanto, podemos adjuntar tantos objetos NSManagedObjectContext a un único NSPersistentStoreCoordinator como lo deseemos sin temor a una colisión.