es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es seguro realizar una migración local de Realm en un hilo en segundo plano?

Estamos en proceso de optimizar el tiempo de inicio de la aplicación y uno de los retrasos importantes proviene de la inicialización de Realm.

Tenemos este código que se llama durante didFinishLaunchingWithOptions:

RLMRealmConfiguration *config = [[RLMRealmConfiguration alloc] init];
config.schemaVersion = kCurrentSchema;
config.migrationBlock = /* tarea de migración */;
config.fileURL = fileUrl;
config.encryptionKey = encryptionKey;

return config;

Durante la inicialización, intentamos crear un RLMRealm al menos una vez usando esta configuración para verificar si podemos abrir Realm o no. Si la apertura falla, realizamos operaciones para eliminar la carpeta de Realm utilizando NSFileManager y comenzamos de nuevo.
Después de que todo esté hecho, establecemos:

[RLMRealmConfiguration setDefaultConfiguration:config];

Mi pregunta es:
1. ¿Podemos mover todo el proceso de creación de RLMRealmConfiguration y la inicialización de RLMRealm a un hilo en segundo plano?
2. ¿Podemos despachar la creación de RLMRealmConfiguration en un hilo en segundo plano y luego pasarla al hilo principal para llamar a setDefaultConfiguration después de que se haya completado la migración?
3. Después de una migración exitosa y de despachar una llamada a [RLMRealmConfiguration setDefaultConfiguration:config] en el hilo principal, ¿el resultado de la migración en el hilo en segundo plano se escribe en el archivo o sigue en la memoria? Si creo otro RLMRealm en el hilo principal directamente después de setDefaultConfiguration, ¿puedo acceder a la versión migrada? Sé acerca de RLMThreadSafeReference, pero eso solo se usa cuando sabemos cómo acceder. En mi caso, tendremos demasiados accesos después de la configuración.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Optimización del tiempo de inicio de la aplicación con la Inicialización de Realm

    Si está experimentando problemas con la inicialización de Realm siendo una desaceleración importante durante el inicio de la aplicación, puede considerar mover el proceso de creación de RLMRealmConfiguration y la inicialización de RLMRealm a un hilo en segundo plano. Esto se puede lograr utilizando técnicas como Grand Central Dispatch (GCD), que le permite realizar trabajo de forma asíncrona en segundo plano.

    1. ¿Podemos mover todo el proceso de creación de RLMRealmConfiguration e inicializar RLMRealm en un hilo en segundo plano?

    Sí, puede crear RLMRealmConfiguration e inicializar RLMRealm en un hilo en segundo plano. Esto se puede hacer envolviendo el código dentro de un bloque de GCD y ejecutándolo en una cola en segundo plano utilizando dispatch_async. Sin embargo, tenga en cuenta que los objetos de Realm no son seguros para subprocesos, por lo que debe tener cuidado de no acceder a ellos desde un hilo diferente al que se crearon.

    1. ¿Podemos despachar la creación de RLMRealmConfiguration en un hilo en segundo plano al hilo principal para llamar a setDefaultConfiguration en el hilo principal después de que haya terminado la migración?

    Sí, puede despachar la creación de RLMRealmConfiguration en un hilo en segundo plano al hilo principal utilizando dispatch_async para llamar a setDefaultConfiguration en el hilo principal después de que haya terminado la migración. Esto asegura que la configuración se establezca en el hilo principal, donde se utilizará para crear la instancia de RLMRealm.

    1. Después de una migración exitosa y el despacho para llamar a [RLMRealmConfiguration setDefaultConfiguration:config]; en el hilo principal, ¿el resultado de la migración desde el hilo en segundo plano se escribe en el archivo o todavía está en memoria? ¿Podemos acceder a la versión migrada sin usar RLMThreadSafeReference?

    Después de una migración exitosa y el despacho para llamar a [RLMRealmConfiguration setDefaultConfiguration:config]; en el hilo principal, el resultado de la migración desde el hilo en segundo plano se escribe en el archivo. Puede acceder a la versión migrada directamente sin usar RLMThreadSafeReference. Sin embargo, asegúrese de que todos los objetos de Realm a los que accede hayan sido creados en el hilo principal para evitar problemas de subprocesamiento.

Comments are closed.