在Realm中进行批量更新的首选方法?

时间:2015-07-24 17:51:24

标签: ios swift realm

我的Realm数据库中有10,000 Person Objects,我拥有的只是每个人的ID。我一直在分析我提出的不同解决方案,以更新每个Person对象上的所有名称。

在我的测试应用程序中,我使用以下内容检索所有ID。

以下代码仅用于获取测试的ID,在实际应用中我已经拥有ID

var ids = [String]()
for person in realm.objects(Person) {
    ids.append(person.id)
}

更新10,000个人物对象的所有名称的第一种方法

realm.write {
    let people = realm.objects(Person).filter("id IN %@", ids)
    for person in people {
        person.name = "lionpants"
    }
}

更新10,000个人对象的所有名称的第二种方法

realm.write {
    for id in ids {
        let person = realm.objectForPrimaryKey(Person.self, key: id)
        person?.name = "lionpants"
    }
}

令人惊讶的是,这两种方法使用Xcode Time Profiler平均大约1200ms运行时(包括获取ID)(我认为第一种方法与谓词会更快)。

就个人而言,由于缺乏谓词,我更喜欢第二种方法。但是,在使用Realm进行批量更新时,是否有首选/不同的方法?也许我错过了一些内置函数?

1 个答案:

答案 0 :(得分:6)

realm.write {
    let people = realm.objects(Person).filter("id IN %@", ids)
    people.setValue("lionpants", forKey: "name")
}

应该稍快一些,并且通常使用KVC对结果会更高效,因为Realm可以采取一些快捷方式。