2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】Realm accessed from incorrect thread

Posted at

題のエラーについて。

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

勉強になった。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?