Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果我多次调用tableView.reloadData,是否会导致性能问题?_Ios_Swift_Uitableview - Fatal编程技术网

Ios 如果我多次调用tableView.reloadData,是否会导致性能问题?

Ios 如果我多次调用tableView.reloadData,是否会导致性能问题?,ios,swift,uitableview,Ios,Swift,Uitableview,我只想非常优雅地在表视图中添加和删除行。所以我问这个。但我不认为答案回答了我的问题 然后我想我可以创建一个UITableViewCells数组,并将其用作数据源 所以我做了这样的事情: class MyTableViewController: UITableViewController { var cells = [[UITableViewCell]]() override func numberOfSectionsInTableView(tableView: UITableV

我只想非常优雅地在表视图中添加和删除行。所以我问这个。但我不认为答案回答了我的问题

然后我想我可以创建一个
UITableViewCell
s数组,并将其用作数据源

所以我做了这样的事情:

class MyTableViewController: UITableViewController {
    var cells = [[UITableViewCell]]()

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return cells.count
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return cells[section].count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return cells[indexPath.section][indexPath.row]
    }

    func addCellToSection(section: Int, cell: UITableViewCell) {
        cells[section].append(cell)
        tableView.reloadData()
    }

    func removeCellFromSection(section: Int, index: Int) {
        cells[section].removeAtIndex(index)
        tableView.reloadData()
    }
}
现在我可以调用
removeCellFromSection
addCellToSection
来添加和删除单元格。多么优雅啊

但是,我不确定一直调用
tableView.reloadData()
是否会降低应用程序的速度。每次添加或删除单元格时,表视图中的每个单元格都需要刷新。那将是一个很大的工作,对吗

因此,一直调用
tableView.reloadData()
会显著降低我的应用程序的速度吗?如果是,有什么替代方案?若否,原因为何

其他信息:


最初,表视图包含4个单元格。用户可以通过按按钮添加单元格和删除单元格。平均而言,用户将添加不到50个单元格。

是的,它将很慢。此外,如果您自己存储
UITableViewCell
s,它将使用比需要更多的内存,因为您将同时存储数据和单元格实例。UITableView编程系统旨在为您完成大量工作,但它有一个学习曲线

此外,添加和删除表行的机制非常优雅,但正如我所说的,确实有一个学习曲线


苹果提供。

是的,它会很慢。此外,如果您自己存储
UITableViewCell
s,它将使用比需要更多的内存,因为您将同时存储数据和单元格实例。UITableView编程系统旨在为您完成大量工作,但它有一个学习曲线

此外,添加和删除表行的机制非常优雅,但正如我所说的,确实有一个学习曲线


苹果公司提供。

如果您拥有手机的indexPath

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPathOfYourCell, nil] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates]; 

它可能会帮助您。

如果您有单元格的索引

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPathOfYourCell, nil] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates]; 

它可能会对您有所帮助。

是的,重新加载数据会降低其性能。当调用reload方法时,用于构造表的所有数据(包括单元格、节页眉和页脚、索引数组等)都会更新并重新加载。因此,当需要更新数据或视图时,我们应该调用此方法。为了提高效率,表视图只重新显示那些可见的行。如果表格因重新加载而收缩,则会调整偏移。当表视图希望表视图完全重新加载其数据时,表视图的委托或数据源调用此方法。不应在插入或删除行的方法中调用它,特别是在通过调用BeginUpdate和EndUpdate实现的动画块中。

是重新加载数据将降低其性能。当调用reload方法时,用于构造表的所有数据(包括单元格、节页眉和页脚、索引数组等)都会更新并重新加载。因此,当需要更新数据或视图时,我们应该调用此方法。为了提高效率,表视图只重新显示那些可见的行。如果表格因重新加载而收缩,则会调整偏移。当表视图希望表视图完全重新加载其数据时,表视图的委托或数据源调用此方法。在插入或删除行的方法中,尤其是在通过调用BeginUpdate和EndUpdate实现的动画块中,不应调用它。

是的,它会很慢。当然,它会很慢,而且如果您多次重新加载数据,您也不能期望平滑的tableview滚动。@ShangariC那么还有其他选择吗?那么,如果您有类似的单元格,那么您的实现是错误的,这就是为什么我们使用
reuseIdentifier
使用所需的值更新单元格,而不是创建或保留大量单元格。。。将单元格保留在数组中仍将它们保留在内存中。。。而是将所需数据保存在数组中,以区分单元格,并在可在
cellforrowatinexpath
中重用的单元格中更新它们。不要创建单元格数组。创建要在单元格中使用的数据数组,并将其用作数据源。在
cellforrowatinexpath
中进行单元格自定义,TableView将负责显示、隐藏、滚动和刷新单元格。TableView重用单元格,因此内存使用将非常合理。你不必自己做。并且一定要查阅一本关于tableview的好教程。是的,它会很慢。当然,它会很慢,而且如果你多次重新加载数据,你也不能期望tableview平滑滚动。@ShangariC那么还有其他选择吗?那么,如果你有类似的单元格,你实现它是错误的,这就是为什么我们使用
reuseIdentifier
用所需的值更新单元格,而不是创建或保留大量单元格。。。将单元格保留在数组中仍将它们保留在内存中。。。而是将所需数据保存在数组中,以区分单元格,并在可在
cellforrowatinexpath
中重用的单元格中更新它们。不要创建单元格数组。创建要在单元格中使用的数据数组,并将其用作数据源。在
cellforrowatinexpath
中进行单元格自定义,TableView将负责显示、隐藏、滚动和刷新单元格。TableView重用单元格,因此内存使用将非常合理。你不必自己做。并且一定要查找一个关于TableView的好教程。我现在需要开始,所以我稍后会尝试这个。非常感谢。等待我有个问题。如果我删除一个单元格,我应该重新加载哪个索引路径?我现在需要去,所以我会稍后再试。非常感谢。等待我有个问题。如果删除单元格,应重新加载哪个索引路径?