2017-08-17 34 views
0

我有一個聊天消息tableView,我想加載消息。
有任何想法讓tableView重新加載消息快? 我嘗試這個功能。
但我不知道如何做更好的方法。
謝謝。
如何使數組附加並在tableView中快速排序swift

var contents:[ChatroomMessage] = [ChatroomMessage]() 

func loadMessages() { 

    //I think remove and append are very cost time 
    self.contents.removeAll(keepingCapacity: false) 
    self.chatroom.messages.forEach({ (id,message) in 
     self.contents.append(message) 
    }) 

    if contents.count == 0 {    
     return 
    } 

    self.contents.sort(by: { (a,b) in 
     a.datetime < b.datetime 
    }) 

    self.tableView.reloadData() 
    if self.contents.count > 0 { 
     self.tableView.scrollToRow(at: IndexPath.init(row: self.contents.count-1,section: 0), at: .bottom, animated: false) 
    } 

} 
+0

從哪裏調用'loadMessages'?最好的地方是設置一個通知,在每個消息接收時調用'loadMessages'。如果你在前臺,不需要像日期那樣進行任何操作。 –

+3

不要*猜測*哪些操作很慢。使用工具和*配置文件。* –

+0

實際上,簡單地分配(排序)數組的效果與*移除+附加*效果相同。 – vadian

回答

0

在任何聊天時很少使用reloadData(),因爲你可以有消息很多在聊天視圖。

相反,您應該重新加載(重新佈局)特定項目(或單元格)。因爲你應該創造不同的狀態。 您可以使用任何庫進行比較(例如 - https://github.com/wokalski/Diff.swift

此外,您可以使用nMessenger(https://github.com/eBay/NMessenger),它非常完美。基於AsyncDisplayKit(又名紋理)的Pinterest信使視圖。

+1

>在任何聊天中很少使用reloadData(),因爲聊天視圖中可以有很多消息。 從技術上說是的,但原因並不是「很多消息」。我們使用'(重新加載/刪除/插入)Rows'方法,而不是'reloadData',因爲動畫和HIG很好,但不是因爲「reloadData花費很多時間處理大量的項目」。 'reloadData'只更新UI的可見部分。 – pacification

+1

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/17059216) – derape