是否有任何理由使用saveInBackground
而不是saveEventually
?两者都有可用的回调。性能或功能有什么不同吗?它们的功能是否完全相同,但其中是否有网络检查?
我的理解是,它们是相同的,因为它们在文档中进行了比较,但文档没有明确说明这一点。是否将saveEventually
推送到比saveInBackground
更高优先级的线程,或者线程是否相同?
更新:
正如Mikeg在下面提到的,由于性能差异,我为以防万一的情况做了一个简单的回退保存方法。我现在在任何地方都使用这个,我会运行一个正常的保存操作。isaveEventually
然后回退到saveInBackground
:
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)
}
})
}
最佳答案
这两种功能是不同的。saveInBackground
异步执行保存。这意味着它调用save函数,然后立即返回到调用线程,这样功能就可以继续,而无需等待save函数完成并返回。我已经在我的应用程序中使用了saveInBackground
并做了数百次测试,只要有可用的互联网连接,这个功能将在最多3秒钟内完成,通常在1秒内完成。当没有可用的Internet连接时,此功能的表现如何?我不确定,但如果您处于不确定连接是否可用的情况下,但需要进行保存,请使用saveEventually()
。
另一方面,saveEventually
将在将来某个未指定的时间执行保存。即使Internet连接不可用,它也将等待连接可用,然后执行保存。我相信,尽管我不是肯定的,但是这个功能被分派到一个服务质量Background
的队列中,因此它不是一个高优先级的任务,它可以推迟到将来某个特定的时间获得资源。如果连接长时间不可用,这可能需要几秒到几分钟甚至几小时。
编辑:忘记直接回答问题,“是否存在性能差异…”。答案是肯定的!
关于swift - saveInBackground v saveEventually有性能差异吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35235048/