題のエラーについて。
realmをクラス変数にして複数の関数でそのインスタンスを使いまわしていたとき、よくアクセスするスレッドがおかしいですよーなんてエラーが見られた。
どうもこのやり方は良くないらしく、データの操作を実行するたびに新しいrealmのインスタンスを作って読み書きなどしなければならないらしい。
個人的には何度もインスタンス化するのはパフォーマンス的にもコード的にも気持ちよくないのでは、?と感じたのだが、
取り敢えずパフォーマンス面においてはスレッドごとにrealmのインスタンスをキャッシュしてくれる様なのでそれを問題視する必要なんて無い様です。
BAD
RealmModel.swift
// bad bad bad bad bad bad bad bad
final class RealmModel {
let realm = try! Realm()
func saveBook(book: Book) {
try! realm.write {
realm.add(book)
}
}
func updateBook(book: Book, title: String) {
try! realm.write {
book.title = title
}
}
}
// bad bad bad bad bad bad bad bad
OK
RealmModel.swift
// ok ok ok ok ok ok ok ok ok ok ok
final class RealmModel {
func saveBook(book: Book) {
let realm = try! Realm()
try! realm.write {
realm.add(book)
}
}
func updateBook(book: Book, title: String) {
let realm = try! Realm()
try! realm.write {
book.title = title
}
}
}
// ok ok ok ok ok ok ok ok ok ok ok
勉強になった。