表格单元格中的Firebase观察者是否算作每个实例的观察者?

时间:2016-09-06 03:19:19

标签: ios swift uitableview firebase firebase-realtime-database

如果我在每个单元格中都有一个包含图像的表格,并且我将Firebase .observer放在自定义tableview单元格类中,那么这是否算作为表格的每个单元格运行一个观察者?

因此,如果10个用户每个发布10个单元格并且表格中有100个单元格,那么firebase基本上看到这与100个观察者相同吗?这是一个糟糕的设计吗?

发布后我正在考虑UITableViews如何工作,并且当前在屏幕上的单元格可能无法实际保持观察者的运行。如果以这种方式工作,这将非常方便和有效,请告诉我。

3 个答案:

答案 0 :(得分:0)

首先,你是正确的,因为屏幕上没有的细胞实际上不存在"爱好。

通常,您不希望在单元格内部执行任何密集操作(API调用,呈现等),因为在滚动时,tableview.dequeuereusablecellwithidentifier必须运行生成的每个单元格的代码。在滚动时你会遇到明显的不稳定/ lagg(你可能不会在模拟器上注意到它,因为这些天的计算机速度非常快)。

答案 1 :(得分:0)

  1. 根据您的设计,您可能在那里有一个或多个观察员。如果你有一个类的实例调用Firebase的observeEvent,那么是的,你将有一个单独的观察者到Firebase的数据库,但是这仍然是与数据库的一个连接,因为你可能通过主要这样做FIRDatabase.database.reference()

  2. 同样,它依赖于您实现表视图的方式。您可以查看UITableViewCell documentation,特别是在可重复使用的单元格和reuseIdentifier的部分。如果以这种方式实现它,你将始终只在内存中分配(屏幕上的单元格数+ 1)单元格,这意味着相同数量的观察者。

答案 2 :(得分:0)

<button ng-click="controllerVM.onClick()">Button</button>

鉴于您的数据库结构如下所示,您可能希望在用户路径上观察{ "users": { 1: { "username": "david" } }, "posts": { 1: { "text": "Hello World!" } } "user-posts": { 1: { 1: true } } } 事件。对于您想要观察其用户帖子的每个孩子(用户),例如ChildAdded会给你一个post id列表。使用这些帖子ID,您可以为每个键填充表格视图单元格并观察完整帖子,例如user-posts/1。请记住,一旦你创建了观察者,除非你删除它,它将继续监听,无论细胞是否在屏幕上。使用相应的表视图委托方法显示单元格结束时,可以删除观察者。