Nous sommes en train de convertir un projet pour utiliser Realm. Nous sommes vraiment impressionnés jusqu'à présent, en particulier avec le navigateur Realm (si pratique!).
En conséquence, quelques questions se sont posées et nous aimerions obtenir des modèles d'utilisation concrets avant d'aller plus loin. Notre application est fortement multi-thread (appels API, animations, etc.), alors gardez cela à l'esprit lorsque vous lisez les questions, car je sais que les instances de Realm ne sont pas accessibles sur les threads (actuellement).
realm
est-il une mauvaise pratique Object
? Nous l'avons utilisé pour écrire dans un domaine si la fonction utilisant l'objet n'a pas créé l'objet ou le domaine (sur le même thread bien sûr).Par exemple...
func saveStuff(thingToUpdate: Object?) {
if let thingToUpdate = thingToUpdate, let realm = thingToUpdate.realm {
realm.write {
thingToUpdate.name = "lionpants"
}
}
}
Merci d'avance. J'attends vos réponses avec impatience. :RÉ
(Avertissement: Je travaille pour Realm. J'ai quitté Realm maintenant, mais je suis toujours heureux de vous aider!):) Merci beaucoup! C'est super d'entendre que vous appréciez Realm!
Plusieurs instances de royaume - Vous n'avez pas du tout à vous en préoccuper! Un objet de fichier de domaine est créé lors de la première instanciation sur chaque thread, et ce même objet est ensuite renvoyé chaque fois que vous essayez de l'instance à chaque fois par la suite.
Conservation des instances de domaine - Suite au premier point, non, vous n'avez pas à vous soucier de vous accrocher à Realm référence à l'intérieur d'autres objets. Comme Realm suit ses objets de fichier Realm en interne et renvoie les mêmes, vous ne serez pas pénalisé pour ne pas le faire. Cela étant dit, si avoir une référence permanente à un objet Realm à l'intérieur de votre objet simplifie la complexité de votre code, n'hésitez pas à continuer à l'utiliser.
Accès aux propriétés des relations de domaine - À strictement parler, les données des fichiers de domaine ne sont pas copiées à partir du disque (comme le ferait un ORM normal ); de plus, il utilise le mappage de la mémoire pour référencer directement les données du disque directement vers vos propriétés en mémoire. Donc, non, vous n'avez pas à vous soucier que les fichiers du domaine deviennent trop volumineux en mémoire.
Actualisation automatique L'actualisation automatique est uniquement activée par défaut pour l'objet fichier Realm sur le thread principal. Il doit être activé manuellement pour les objets de fichier Realm sur d'autres threads, ou vous pouvez plutôt choisir de les actualiser manuellement avec l'appel de méthode refresh
.
EDIT: Je me tiens corrigé! Tous les objets de fichier de domaine sur plusieurs threads ont autorefresh
activé par défaut. Lorsque autorefresh
est activé, le seul moment où vous devez appeler refresh
est si vous avez besoin que les modifications apportées à un fichier de domaine soient reflétées dans les autres références avant que l'itération actuelle de la boucle d'exécution ait terminé.
Référencer la référence au royaume d'un objet Absolument pas, ce n'est pas du tout une mauvaise pratique! En fait, je préfère le faire dans mes propres applications personnelles qui utilisent Realm pour fournir le contexte approprié, car c'est toujours plus facile et fournit un contexte visuel plus fort entre l'objet et son fichier Realm parent dans le code. (Haha yep, s'il y avait un problème de threading ici, vous l'auriez probablement découvert avant même d'atteindre le point write
).
J'espère que cela a aidé! Faites-moi savoir si vous avez besoin d'éclaircissements sur quoi que ce soit ici!