saveInBackground v saveEventually有性能差异吗?

时间:2016-02-05 23:05:20

标签: swift parse-platform

有没有理由使用saveInBackground代替saveEventually?两者都有可用的回调。性能或功能有什么不同吗?它们是完全相同的功能,但saveEventually有网络检查吗?

我的理解是它们是相同的,因为它们在文档中进行了比较,但文档没有明确说明。 saveInBackground被推送到比saveEventually更高优先级的线程,或者线程是否相同?

更新

由于存在性能上的差异,正如下面的MikeG所说,我做了一个简单的后备保存方法,以防万一。我现在在任何地方都使用它来运行正常的保存操作。我saveInBackground然后回退到saveEventually

func saveInBackgroundIfNotSuccessSaveEventually(object: PFObject, completion: (() -> ())?) {

object.saveInBackgroundWithBlock({ (success, error) -> Void in

    if !success {
        object.saveEventually({ (success, error) -> Void in

            if success {
                completion?()
            }

            if error != nil {
                NSLog(error!.localizedDescription)
            }
        })

    } else if success {
        completion?()
    }

    if error != nil {
        NSLog(error!.localizedDescription)
    }
})

}

2 个答案:

答案 0 :(得分:3)

saveInBackground将在应用运行时保存在后台。

saveEventually会将您的对象添加到缓存中,以便在您的应用运行时保存到Parse。或者不是。

如果没有可用的网络:

  • saveInBackground会在您的应用播放时重试X次 跑步,最终会失败。
  • 无论您的应用是否正在投放,
  • saveEventually都会继续尝试。

来源:

答案 1 :(得分:1)

这两个功能是不同的。 //Signing Considerations //You should sign all of your apps with the same certificate throughout the expected lifespan of your applications. 异步执行保存。这意味着它调用save函数,然后立即返回调用线程,以便可以继续执行功能,而无需等待save函数完成并返回。我一直在我的应用程序中使用saveInBackground,并且已完成数百次测试,只要有互联网连接,此功能将在3秒内完成,通常在1秒内完成。当没有可用的互联网连接时,此功能的行为方式我不确定,但如果您不确定连接是否可用,但需要进行保存,请使用saveInBackground

另一方面,

saveEventually()将在未来某个未指定的时间执行保存。即使互联网连接不可用,它也会等到连接可用,然后执行保存。我相信,虽然我不是肯定的,但是这个函数被调度到具有服务质量saveEventually的队列,因此它不是一个高优先级的任务,它可以被推迟,直到资源在某个未指定的时间可用在将来。如果连接长时间不可用,这可能需要几秒到几分钟甚至几个小时。

编辑:忘了直接回答这个问题,“是否存在性能差异......”。答案是肯定的!