我有一个 RESTful API ,我可以从中检索大量数据。我使用 Realm 进行本地持久化以及以下调用:
func addObjectType(object: ObjectType){
// Check for existence of data
if (realm.object(ofType: ObjectType.self, forPrimaryKey: object.id) == nil) {
// Persist your data easily
try! realm.write {
realm.add(object)
}
}
}
该应用程序具有在本地删除数据的功能。我已将其实施为关注:
func deleteAllData() {
if(!realm.isEmpty){
do{
if(!realm.isInWriteTransaction) {
realm.beginWrite()
realm.deleteAll()
try! realm.commitWrite()
}
}
NotificationCenter.default.post(name: Notification.Name("updateUI"), object: nil)
}
}
但是,查看 Realm 文档,我会看到以下内容:
指示Realm当前是否处于写入事务中。
警告
不要只是检查此属性,然后启动写入事务 每当需要创建,更新或删除对象时。这样做 可能会导致创建大量写入事务, 降低性能。相反,总是喜欢执行多个 单次交易期间的更新。
我的实施是否正确?
我觉得我错过了一些支票 ..
答案 0 :(得分:1)
Realm的一般经验法则是,您应尽量减少尽可能多的写入事务。这包括将一个块内的多个写入批处理,并且如果日期实际上没有更改,则尝试避免所有事务处理。
Realm写入事务在单独的线程上是自包含的。如果后台线程正在执行写入事务,则将阻止其他线程上的所有其他事务。因此,除非在该特定线程上打开写入事务,否则不必检查isInWriteTransaction
。
所以,不,你不会错过任何额外的检查。只要您没有意外地将写入交易打开到其他地方,您甚至可以减少您到达那里的支票数量。 :)