gpt4 book ai didi

ios - 从 Firebase 获取数据的最有效方式

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:32 26 4
gpt4 key购买 nike

我正在获取当前用户的 friend 并将用户存储在一个数组中,该数组显示在 Collection View 中。 friend Collection View 在我的主视图 Controller 上,这意味着它始终保留在用户堆栈中

我的问题是,如果用户通过用户个人资料页面添加或删除 friend ,然后导航回主页 View ,我必须重新获取数据并刷新 中的 Collection View 查看将出现。这使得应用程序的数据成本很高,我绝对觉得这不是最有效的方法。

我知道 Firebase 允许我设置观察者,但是我不太确定在不接收大量数据的情况下执行此操作的最佳方法。

这是我目前获取用户好友的方式

func fetchFriends() {

let userID = Auth.auth().currentUser?.uid
var tempFriend = [UserClass]()

self.usersArray.removeAll()
collectionView.reloadData()

let friendRef = self.databaseRef.child("users").child(userID!).child("Friends")
friendRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in

let friendID = "\(snapshot.value!)"
let usersRef = self.databaseRef.child("users")

usersRef.observeSingleEvent(of: .value, with: { (users) in

for user in users.children {
let friend = UserClass(snapshot: user as! DataSnapshot)

if friendID == friend.uid {
tempFav.append(friend)
}
}
self.usersArray = tempFav
self.collectionView.reloadData()

if self.usersArray.count == 0 {
self.noDataLabel.text = "You have no friends!"
self.noDataLabel.isHidden = false
} else {
self.noDataLabel.text = "Loading..."
self.noDataLabel.isHidden = true
}
})
})
}

这会在用户的 viewWillAppear 中调用

为了让这个问题尽可能清楚,什么是最好的方式来刷新用户的 friend ,而不需要每次出现 View 时都重新获取整个列表。

最佳答案

听起来您目前正在 View 消失时移除您的观察者。届时 Firebase 将从其内存缓存中删除用户数据。因此,当您在 viewWillAppear 中重新附加监听器时,确实需要从 Firebase 服务器重新加载数据。

如果您不希望重新加载数据,则需要确保它在设备上仍然可用。有两种选择:

  1. 确保数据保留在内存中
  2. 确保数据持久保存到磁盘

确保数据保留在内存中

为确保数据保留在内存中,即使在用户导航离开 View 后,您也必须保持观察者连接。这意味着您需要另一个类来管理观察者,该类不会在用户导航时移除观察者。

最简单的方法是使用一个全局单例来管理观察者和用户数据,例如用户数据管理器。当您的 View 首次调用此类时,创建/附加监听器并读取用户数据。当后续 View 需要用户时,他们已经加载到 UserDataManager 中以供使用。

这样做的主要问题是,当您对更多数据执行此操作时,您最终可能会在内存中保留比需要更多的数据。因此,请注意此类不需要的数据的内存消耗,并根据需要修剪(删除监听器)。

确保数据持久化到磁盘

减少下载数据量的一种简单方法是在应用程序启动时 =enable disk persistence]( https://firebase.google.com/docs/database/ios/offline-capabilities#section-disk-persistence )。

如果启用了磁盘持久性,Firebase 客户端会将它最近观察到的数据存储到磁盘(除了将任何事件数据保留在内存中之外)。当您附加一个新的观察者并且数据尚未在内存中时,Firebase 将检查该数据的磁盘缓存。如果数据存在于磁盘缓存中,它会使用它来重建其内存缓存并对服务器执行更便宜(带宽方面)的检查。

关于ios - 从 Firebase 获取数据的最有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48720461/

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