💽
Realmインスタンスのキャッシュは2段階
Realmインスタンスのキャッシュは2段階でキーをつくってRealmインスタンスをstaticに保存しているっぽい。
当然、Realmをインスタンス化する際にRealmをキャッシュから取り出せる。
つまり、データ自体はファイルにあり、それにアクセスしてくるRealmインスタンスごとにキャッシュを持っている。
想像上の構造としては次の通り。
s_realmsPerPath = {
"/path/to/realm1.realm" => {
thread1 => realmInstance1,
thread2 => realmInstance2
},
"/path/to/realm2.realm" => {
thread1 => realmInstance3,
thread2 => realmInstance4
}
}
何が言いたいかというと、同じデータのRealmにあくせすしてもスレッドごとにインスタンスは別物である。
インスタンスが別だと何が困るの?
Realmはインスタンスごとにデータを分岐している。具体的にはメインスレッドで作成したRealmのデータから別スレッド用にデータを分岐し、それをメインにマージする。
そのタイミングによってはメインスレッドで書き込まれたデータが、別スレッドには存在しないということがある。
cahceを使いたくない
configurationでcacheをfalseにしたらいい(dynamicもfalse)。
Discussion