2016-09-06 13 views
0

如果我在每個單元格中都有一張表格,並且我將Firebase .observer放在自定義tableview單元格類中,那麼這是否會計算爲表格的每個單元格都有一個觀察者?表格單元格中的Firebase觀察者是否作爲每個實例的觀察者計數?

因此,如果10個用戶每個發佈10個單元格,並且表中有100個單元格,那麼firebase基本上將此視爲與擁有100個觀察者一樣?這是不好的設計?

在發佈之後,我一直在考慮如何使用UITableViews,並且目前不在屏幕上的單元格可能不會真正保持觀察者運行。如果以這種方式工作,這將非常方便和高效,請讓我知道。

回答

0

首先,你是正確的,不在屏幕上的單元格實際上不存在。

通常,您不希望在單元格本身(API調用,渲染等)內部進行任何密集操作,因爲在滾動時,tableview.dequeuereusablecellwithidentifier必須運行正在生成的每個單元的代碼。滾動時你會體驗到明顯的不穩定/拉格(你可能沒有注意到它在模擬器上,因爲現在的計算機相當快速)。

0
  1. 根據您的設計,您可能有一個或多個觀察員在那裏。如果您有一個調用Firebase的observeEvent的類的實例,那麼是的,您將擁有Firebase數據庫的單獨觀察者,但這仍然是與數據庫的一個連接,因爲您可能正在通過主FIRDatabase.database.reference()執行此操作。

  2. 同樣,它依賴於你如何實現表視圖。你可以看看UITableViewCell documentation,特別是在可重用單元的部分和reuseIdentifier。如果以這種方式實現,您將始終只在內存中分配(分配給屏幕+ 1的單元格的數量)單元,這意味着相同數量的觀察者。

0
{ 
    "users": { 
     1: { 
      "username": "david" 
     } 
    }, 
    "posts": { 
     1: { 
      "text": "Hello World!" 
     } 
    } 
    "user-posts": { 
     1: { 
      1: true 
     } 
    } 
} 

鑑於你的數據庫結構看起來是這樣的,你要觀察的用戶路徑上的ChildAdded事件。對於每個孩子(用戶)你想觀察他們的用戶帖子,例如user-posts/1會給你一個post ID的列表。使用這些帖子ID,您可以爲每個鍵填充一個表格視圖單元格並觀察完整的帖子,例如posts/1。請記住,一旦創建了觀察者,除非您將其刪除,否則無論該單元格是否在屏幕上,它都會繼續收聽。當單元格使用相應的表視圖委託方法結束顯示時,可以刪除觀察者。