【问题标题】:Does a Firebase observer in a table cell count as an observer for each instance?表格单元格中的 Firebase 观察者是否算作每个实例的观察者?
【发布时间】:2017-01-13 09:19:43
【问题描述】:

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

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

发布此消息后,我在思考UITableViews 的工作原理,可能当前不在屏幕上的单元格实际上不会让观察者继续运行。如果这样工作,那将非常方便和高效,请告诉我。

【问题讨论】:

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


    【解决方案1】:
    {
        "users": {
            1: {
                "username": "david"
            }
        },
        "posts": {
            1: {
                "text": "Hello World!"
            }
        }
        "user-posts": {
            1: {
                1: true
            }
        }
    }
    

    鉴于您的数据库结构看起来像这样,您可能希望观察用户路径上的ChildAdded 事件。对于您想要观察他们的用户帖子的每个孩子(用户),例如user-posts/1 会给你一个帖子ID列表。使用这些帖子 ID,您可以为每个键填充一个表格视图单元格并观察完整的帖子,例如posts/1。请记住,一旦您创建了观察者,除非您将其删除,否则无论单元格是否在屏幕上,它都会继续监听。当单元格结束显示时,您可以使用相应的 Table View Delegate 方法移除观察者。

    【讨论】:

      【解决方案2】:
      1. 根据您的设计,您可能有一个或多个观察者。如果您有一个调用 Firebase 的 observeEvent 的类的实例,那么是的,您将有一个单独的观察者到 Firebase 的数据库,但这仍然是与数据库的一个连接,因为您可能通过主要的 @987654323 执行此操作@。

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

      【讨论】:

        【解决方案3】:

        首先,您是正确的,不在屏幕上的单元格实际上还没有“存在”。

        通常,您不希望在单元格本身内部执行任何密集的操作(API 调用、渲染等),因为当您滚动时,tableview.dequeuereusablecellwithidentifier 必须针对正在生成的每个单元格运行代码。滚动时您会体验到明显的断断续续/滞后(您可能在模拟器上不会注意到,因为如今的计算机速度非常快)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-21
          • 2018-06-11
          相关资源
          最近更新 更多