such realmswift objective example data ios swift realm

ios - realmswift - ¿Patrones de uso/mejores prácticas del Reino adecuados?



realm swift example (1)

Estamos en el proceso de convertir un proyecto para usar Realm. Hasta ahora estamos realmente impresionados, especialmente con el navegador Realm (¡tan útil!).

Como resultado, han surgido algunas preguntas y nos gustaría obtener algunos patrones de uso concretos antes de continuar. Nuestra aplicación es muy multiproceso (llamadas API, animaciones, etc.), así que tenlo en cuenta al leer las preguntas, ya que sé que las instancias de Realm no se pueden acceder a través de hilos (actualmente).

  • ¿Cuán preocupados deberíamos estar por crear repetidamente instancias de Realm? ¿Qué es la sobrecarga?
  • ¿Deberíamos molestarnos en retener instancias de Realm en ViewControllers o Singletons para uso repetido? Hemos intentado esto, pero a veces se accede a las instancias desde diferentes subprocesos, por lo que tuvimos que volver a crear una nueva instancia cada vez.
  • Al acceder a las propiedades de relación en instancias de Realm, ¿los datos resultantes que se leen se retienen en la memoria o se leen desde el disco cada vez? ¿Tenemos que preocuparnos de que las instancias de Realm retenidas se vuelvan demasiado grandes debido al profundo acceso a las relaciones?
  • ¿Cuándo es necesario actualizar una instancia de Realm? Me di cuenta de que cuando hago cambios en el navegador Realm se reflejan en un Reino retenido sin llamar a actualizar.
    • Parece que hay una propiedad de actualización automática en cada reino que causa esto de acuerdo con la documentación.
  • ¿Acceder a la propiedad del realm en un Object una mala práctica? Lo hemos usado para escribir en un Reino si la función que usa el objeto no creó el objeto o el Reino (en el mismo hilo, por supuesto).

Por ejemplo...

func saveStuff(thingToUpdate: Object?) { if let thingToUpdate = thingToUpdate, let realm = thingToUpdate.realm { realm.write { thingToUpdate.name = "lionpants" } } }

Gracias por adelantado. Espero sus respuestas. :RE


(Descargo de responsabilidad: Yo trabajo para Realm. He dejado Realm ahora, ¡pero todavía estoy feliz de ayudar!) :) ¡ Muchas gracias! ¡Es genial saber que estás disfrutando de Realm!

Múltiples instancias de reino : ¡no necesita preocuparse por esto en absoluto! Un objeto de archivo Realm se crea la primera vez que se crea una instancia en cada subproceso, y ese mismo objeto se devuelve posteriormente cada vez que intente e instale cada vez después.

Retención de instancias de reino : siguiendo desde el primer punto, no, no necesita preocuparse por aferrarse a la referencia de reino dentro de otros objetos. A medida que Realm rastrea sus objetos de archivo Realm internamente y devuelve los mismos, no será penalizado por no hacerlo. Dicho esto, si tener una referencia permanente a un objeto Realm dentro de tu objeto simplifica la complejidad de tu código, no dudes en seguir usándolo.

Acceso a las propiedades de relación del reino : estrictamente hablando, los datos de los archivos del reino no se copian del disco (como haría un ORM normal); Además, utiliza la asignación de memoria para hacer referencia directa a los datos del disco directamente a las propiedades en memoria. Entonces, no, no necesita preocuparse de que los archivos Realm se vuelvan demasiado grandes en la memoria.

Autorefrescar La actualización automática solo está habilitada de forma predeterminada para el objeto de archivo Realm en el hilo principal. Tiene que habilitarse manualmente para los objetos de archivo Realm en otros subprocesos, o puede optar por actualizarlos manualmente con la llamada al método de refresh .

EDITAR: ¡ Estoy corregido! Todos los objetos de archivo Realm en varios subprocesos tienen autorefresh automática autorefresh de forma predeterminada. Cuando la refresh autorefresh está autorefresh , la única vez que necesita llamar a refresh es si necesita que los cambios realizados en un archivo Realm se reflejen en las otras referencias antes de que la iteración actual del ciclo de ejecución se haya completado.

Hacer referencia a la referencia del Reino de un objeto ¡ Absolutamente no, no es una mala práctica en absoluto! De hecho, prefiero hacer esto en mis propias aplicaciones personales que usan Realm para proporcionar el contexto adecuado, ya que invariablemente es más fácil y proporciona un contexto visual más fuerte entre el objeto y su archivo Realm padre en el código. (Jaja sí, si hubiera un problema de subprocesamiento aquí, probablemente lo habría descubierto incluso antes de llegar al punto de write ).

¡Espero que haya ayudado! ¡Avísame si necesitas aclaraciones sobre algo aquí!