適切なレルムの使用パターン/ベストプラクティス?
質問
現在、あるプロジェクトを Realm に移行しているところです。特に Realm Browser(とても便利です!)には、今のところ本当に感心しています。
その結果、いくつかの質問が出てきたので、これ以上先に進む前に、いくつかの具体的な使用パターンを書き留めておきたいと思います。私たちのアプリは激しくマルチスレッド化されているので (API 呼び出し、アニメーションなど)、質問を読むときはそのことを念頭においてください。
- Realm のインスタンスを繰り返し作成することについて、どの程度心配する必要がありますか。オーバーヘッドとは何でしょうか?
- Realm のインスタンスを ViewController や Singleton に保存しておく必要がありますか? に保持すべきでしょうか?これを試しましたが、インスタンスが異なるスレッドからアクセスされることがあり、毎回新しいインスタンスを作成するように戻さなければなりませんでした。
- Realm インスタンスのリレーションシップ プロパティにアクセスする場合、読み込まれた結果データはメモリに保持されますか? 読み込まれたデータは、メモリに保持されますか? ディスクから読み込まれるのでしょうか?リレーションシップへの深いアクセスにより、保持される Realm インスタンスが大きくなりすぎることを心配する必要はありますか? が大きくなりすぎる心配はありませんか?
-
Realm インスタンスのリフレッシュはどのような場合に必要ですか?私は、次のことに気づきました。 Realm ブラウザで変更を加えると、リフレッシュを呼び出さなくても保持されている Realm に反映されることに気づきました。- ドキュメントによると、各レルムに Auto-Refresh プロパティがあり、これが原因となっているようです。
-
へのアクセスは
realm
プロパティにアクセスしていますか?Object
を使うのは悪い習慣でしょうか?オブジェクトを使用する関数がオブジェクトやRealmを作成しなかった場合、Realmに書き込むためにこれを使用しました(もちろん、同じスレッド上で)。
例えば...
func saveStuff(thingToUpdate: Object?) {
if let thingToUpdate = thingToUpdate, let realm = thingToUpdate.realm {
realm.write {
thingToUpdate.name = "lionpants"
}
}
}
ありがとうございました。回答お待ちしております :D
どのように解決するのですか?
(免責事項
私はレルムのために働いています。
今はRealmを離れましたが、まだお役に立てると思います!) :)
どうもありがとうございます! Realmを楽しんでいただけているようで、とてもうれしいです!
複数の Realm インスタンス - この点については全く心配する必要はありません! Realm ファイルオブジェクトは各スレッドで最初にインスタンス化されたときに作成され、その後、インスタンス化を試みるたびに同じオブジェクトが返されます。
Realm のインスタンスを保持する - 最初のポイントに続いて、他のオブジェクトの中で Realm の参照を保持することを心配する必要はないでしょう。Realm は内部で Realm ファイルオブジェクトを追跡し、同じものを返すので、そうしなくてもペナルティを受けることはないでしょう。とはいえ、Realm オブジェクトへの永続的な参照をオブジェクト内に持つことで、コードの複雑さが軽減されるのであれば、遠慮なく使い続けてください。
レルム関係のプロパティにアクセスする 厳密に言うと、Realm ファイルのデータはディスクからコピーされるのではなく(通常の ORM がそうするように)、メモリマッピングを使ってディスクから直接インメモリのプロパティに参照されるのです。そのため、Realm ファイルがメモリ上で大きくなりすぎることを心配する必要はありません。
自動リフレッシュ
自動更新は、デフォルトではメインスレッド上の Realm ファイルオブジェクトに対してのみ有効です。他のスレッド上の Realm ファイルオブジェクトに対しては手動で有効にする必要があり、 その代わりに
refresh
メソッド呼び出しで手動で更新することができます。
EDITです。
訂正します! 複数のスレッドにあるすべての Realm ファイルオブジェクトには
autorefresh
がデフォルトでついています。このとき
autorefresh
がオンになっているときは、唯一
refresh
を呼び出す必要があるのは、実行ループの現在の反復が完了する前に、Realm ファイルに加えられた変更を他の参照に反映させる必要がある場合だけです。
オブジェクトの Realm 参照を参照する
絶対にダメです!バッドプラクティスではありません。私は実際に、適切なコンテキストを提供するために Realm を使用する私自身の個人的なアプリケーションでこれを行うことを好みます。なぜなら、常に簡単で、コード内のオブジェクトとその親 Realm ファイル間の視覚的コンテキストをより強力に提供するからです。(ははは、もしここにスレッドの問題があったとしても、おそらく
write
の点)。
お役に立ったでしょうか?何か不明な点があれば教えてください。
関連
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] 奇妙な不要なXcodeログを隠す
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] iOS 13 のフルスクリーンでモーダルを表示する
-
[解決済み] UIViewに角丸をつける
-
[解決済み] iPhone UITextField - プレースホルダーの文字色を変更する
-
[解決済み] UIViewの左上と右上だけにcornerRadiusを設定する方法は?
-
[解決済み] 16進カラーバリューの使用方法
-
[解決済み】レルムファイルを見つけるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
制御が非ボイド関数の終了に達する
-
IOS8 Development Guide Error Thread 1: signal SIGABRT
-
[解決済み] UITextViewのプレースホルダー
-
[解決済み] iOS Simulatorでネットワークを無効にすることは可能ですか?
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] SwiftでiOSキーボードを任意の場所でタッチして閉じる
-
[解決済み] UITextFieldのテキストインセット?
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。