【问题标题】:NSTableView: Finding out column widths using a Monte Carlo Simulation?NSTableView:使用蒙特卡洛模拟找出列宽?
【发布时间】:2014-12-09 15:19:58
【问题描述】:

NSTableView 声明了这个可选的委托方法:

- (CGFloat)tableView:(NSTableView *)tableView sizeToFitWidthOfColumn:(NSInteger)column;

实现它很容易,但是当您的表中填满 数千 个条目时,您会开始看到 性能问题,调用此方法会使应用程序 没有反应

以下是有关实现该方法的文档说明:

如果您想控制列的宽度,请实施此方法 当用户双击调整大小分隔线时。默认, NSTableView 迭代表中的每一行,通过访问一个单元格 PreparedCellAtRow:column:, 并请求“cellSize”找到 使用合适的最大宽度。

对于大行数,进行蒙特卡罗模拟而不是对每一行进行交互。为了提高性能和准确的结果,它是 建议在使用大表时实现此方法。

所以我开始爬网,搜索“Monte Carlo Simulations”。

我现在对蒙特卡洛模拟是什么有了一个简单的了解, 但我不明白它如何适用于这个特定问题。

我的意思是,最大内容大小是完全随机的。它不遵循任何方程式或规则,它完全基于将插入单元格的内容,那么蒙特卡洛方法如何应用在这里,它将如何帮助我找到足够的内容大小?

【问题讨论】:

    标签: cocoa nstableview montecarlo


    【解决方案1】:

    Monte Carlo:不测量列的每个单元格,而是只测量一组随机的单元格,找到的最大测量值被认为是列的最大宽度。 当然,这不会导致最大单元格宽度。但大多数时候它可能非常接近。并且考虑到该方法的目的,即在双击调整大小分隔符时调整列的大小,这个错误没什么大不了的。如果你想要精确的值,你不应该指望这种方法。

    为什么要实现这样的方法?

    【讨论】:

    • 你问题的最后一部分最好作为对原帖的评论。
    • 好吧,如果是这样的话,它比我想象的要简单。我想实现这个,因为我现在处理它的方式是测量每个单元格的简单方法:当你有十列,比如一千行时,它可能会非常昂贵。 Apple 使用 Monte Carlo 的本机实现速度非常快。我会试试你的建议。
    • @BenRhayader 事情是苹果的方法已经做了我所描述的。除非您想要其他一些行为或估计方法,否则您无需覆盖它
    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 2018-09-24
    • 2018-04-03
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多