处理Realm交易

时间:2017-01-20 10:11:54

标签: ios swift transactions realm

我有一个 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当前是否处于写入事务中。

     

警告

     

不要只是检查此属性,然后启动写入事务   每当需要创建,更新或删除对象时。这样做   可能会导致创建大量写入事务,   降低性能。相反,总是喜欢执行多个   单次交易期间的更新。

我的实施是否正确?

我觉得我错过了一些支票 ..

1 个答案:

答案 0 :(得分:1)

Realm的一般经验法则是,您应尽量减少尽可能多的写入事务。这包括将一个块内的多个写入批处理,并且如果日期实际上没有更改,则尝试避免所有事务处理。

Realm写入事务在单独的线程上是自包含的。如果后台线程正在执行写入事务,则将阻止其他线程上的所有其他事务。因此,除非在该特定线程上打开写入事务,否则不必检查isInWriteTransaction

所以,不,你不会错过任何额外的检查。只要您没有意外地将写入交易打开到其他地方,您甚至可以减少您到达那里的支票数量。 :)