gpt4 book ai didi

swift - runTransactionBlock 导致主线程延迟

转载 作者:行者123 更新时间:2023-11-28 07:55:07 26 4
gpt4 key购买 nike

我有一个应用,当用户点击 UIButton 时, 1. 我在 Firebase 中更新一个 child (比如 tapCount)

  1. 加载带有图像的 ViewController。

我正在使用 transactionBlock 来递增此计数,因为多个用户可能会同时递增此计数。我注意到的是因为完成这个 Firebase 事务有轻微的延迟,应用程序等待完成它然后在单击图像时加载 View Controller 。它几乎使应用程序有点迟钝。那么在不引起任何 UI 问题的情况下执行此操作的推荐方法是什么?有没有办法在后台线程中运行它?谢谢

func incrementTapCount() {
_tapCount += 1

// update the link
ref.runTransactionBlock { (currentData:MutableData) -> TransactionResult in
currentData.childData(byAppendingPath: "tapCount").value = self._tapCount
return TransactionResult.success(withValue: currentData)
}
}



func moreCommentAction(_ sender: AnyObject) {
let postCategory = self.globalPost.postCat


if Auth.auth().currentUser?.uid != nil {

//user is logged in
// this increments the Like count when a button is tapped.
self.globalPost.incrementTapCount()
// let likeCount = self.globalPost.favoriteBoost + self.globalPost.favoriteDict.count + self.globalPost.tapCount
// likeButton.setTitle(" \(likeCount)", for: UIControlState())
}
else {
//user is not logged in, so skip incrementing the tapCount.

}

let moreCommentVC = sender.storyboard?!.instantiateViewController(withIdentifier: "MoreCommentViewController") as! MoreCommentViewController
moreCommentVC.globalPost = self.globalPost
sender.present(moreCommentVC, animated: true, completion: nil)
}

最佳答案

我可以看到与 obj-c 相同的问题。 runTransactionBlock() 立即返回,但在调用 andCompletionBlock() 之前,主线程被阻塞 1-2 秒。

以前没有发生,更新到较新的 firebase 版本后开始看到它。在我的例子中,我设法通过减少要更新的数据量来缩短这种延迟。似乎 firebase 正在主线程上执行类似本地缓存更新的操作(只是一种理论)。

关于swift - runTransactionBlock 导致主线程延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48483803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com