【问题标题】:How to make Array append and sort fast in tableView swift如何使数组在tableView swift中快速追加和排序
【发布时间】:2017-08-17 08:25:42
【问题描述】:

我有一个聊天消息 tableView,我想加载消息。
有任何想法让 tableView 快速重新加载消息吗? 我尝试使用此功能。
但我不知道如何做得更好。
谢谢。

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)
    }

}

【问题讨论】:

  • 从哪里调用“loadMessages”?最好的地方是设置一个通知,在收到每条消息时调用“loadMessages”。如果您在前台,则无需执行日期等任何操作。
  • 不要猜测哪些操作很慢。使用 Instruments 和 profile。
  • 其实简单地赋值(排序的)数组和移除+追加的效果是一样的。

标签: ios arrays swift sorting tableview


【解决方案1】:

在任何聊天中都很少使用reloadData(),因为您可以在聊天视图中有很多消息。

相反,您应该重新加载(重新布局)特定项目(或单元格)。因为你应该创造状态差异。 您可以将任何库用于差异(例如 - https://github.com/wokalski/Diff.swift

另外,您可以使用 nMessenger(https://github.com/eBay/NMessenger),非常完美。基于 Pinterest 的 AsyncDisplayKit(又名 Texture)的 Messenger 视图。

【讨论】:

  • > 在任何聊天中很少使用 reloadData() 因为你可以在聊天视图中有很多消息。技术上是的,但原因不是“很多消息”。我们使用(reload/delete/insert)Rows 方法而不是reloadData 是因为动画和HIG 不错,但不是因为“reloadData 需要大量时间来处理大量项目”。 reloadData 只更新 ui 的可见部分。
猜你喜欢
  • 1970-01-01
  • 2016-12-03
  • 2015-06-10
  • 1970-01-01
  • 2013-08-25
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多