Can we generate Realm results in background queue and use it on main thread

Realm has built-in functionality for running a query on a background thread and delivering the results to the main thread by using Results.observe().

If you specifically need to perform expensive filtering logic that can't be expressed as a Realm query, you can manually pass an array of objects between threads using ThreadSafeReference.

As of 5.0, you can now construct the query on a background thread and receive notifications on the main thread using the on: parameter to observe():

DispatchQueue.global().async {
    let realm = try! Realm()
    let results = realm.objects(ObjectType.self).filter("property in %@", expensiveFunction(realm))
    self.token = results.observe(on: .main) { change in
        // do stuff with the results on the main thread
    }
}

Tags:

Ios

Swift

Realm