Realmを使用するようにプロジェクトを変換しています。これまでのところ、特にRealm Browserに感銘を受けています(とても便利です!)。
その結果、いくつかの質問が出てきたので、先に進む前に具体的な使用パターンを下げたいと思います。私たちのアプリは非常にマルチスレッド(API呼び出し、アニメーションなど)なので、質問を読むときは注意してください。レルムインスタンスはスレッド間で(現在)アクセスできないことがわかっているからです。
realm
のObject
プロパティにアクセスするのは悪い習慣ですか?オブジェクトを使用する関数がオブジェクトまたはレルム(同じスレッド上で)を作成しなかった場合、これをレルムへの書き込みに使用しました。例えば...
func saveStuff(thingToUpdate: Object?) {
if let thingToUpdate = thingToUpdate, let realm = thingToUpdate.realm {
realm.write {
thingToUpdate.name = "lionpants"
}
}
}
前もって感謝します。あなたの答えを楽しみにしています。 :D
(免責事項: 私はレルムで働いています。 私は今レルムを離れましたが、私はまだ助けてうれしいです!):)どうもありがとう! Realmを楽しんでいると聞いてうれしいです!
Multiple Realm Instances-これについて心配する必要はまったくありません!レルムファイルオブジェクトは、各スレッドで最初にインスタンス化されたときに作成され、その後、毎回それを試行してインスタンス化するたびに、同じオブジェクトが返されます。
Realmインスタンスの保持-最初のポイントから続けて、いいえ、Realmに固執する必要はありません他のオブジェクト内の参照。 RealmはRealmファイルオブジェクトを内部的に追跡し、同じオブジェクトを返すため、そうしないことでペナルティを受けることはありません。そうは言っても、オブジェクト内のRealmオブジェクトへの永続的な参照がコードの複雑さを単純化するのであれば、それを使い続けてください。
レルムリレーションシッププロパティへのアクセス-厳密に言えば、レルムファイルのデータはディスクからコピーされません(通常のORMのように);さらに、メモリマッピングを使用して、ディスクのデータを直接メモリ内プロパティに直接参照します。したがって、いいえ、Realmファイルがメモリで大きくなりすぎることを心配する必要はありません。
Auto-refresh 自動更新は、メインスレッドのRealmファイルオブジェクトに対してデフォルトでのみ有効になっています。他のスレッドのRealmファイルオブジェクトに対して手動で有効にする必要があります。または、代わりにrefresh
メソッド呼び出しで手動で更新することを選択できます。
編集:私は修正済みです!複数のスレッド上のすべてのRealmファイルオブジェクトは、デフォルトでautorefresh
がオンになっています。 autorefresh
がオンの場合、refresh
を呼び出す必要があるのは、実行ループの現在の反復が完了する前に、Realmファイルに加えられた変更を他の参照に反映する必要がある場合だけです。完了しました。
オブジェクトのレルム参照を参照する絶対にそうではなく、悪い習慣ではありません!実際には、Realmを使用して適切なコンテキストを提供する個人用アプリでこれを行うことを好みます。なぜなら、常に簡単であり、コード内のオブジェクトとその親Realmファイルの間に強力な視覚的コンテキストを提供するからです。 (はい、はい、ここでスレッドの問題があった場合は、おそらくwrite
ポイントに到達する前に発見したでしょう)。
お役に立てばと思います!ここで何か説明が必要な場合はお知らせください!