NSTableView声明此可选委托方法:
- (CGFloat)tableView:(NSTableView *)tableView sizeToFitWidthOfColumn:(NSInteger)column;
实现起来很容易,但是当表中充满了成千上万的条目时,您开始看到性能问题,调用此方法会使应用程序无响应。
以下是文档中有关实现该方法的内容:
如果要控制列的宽度,请实施此方法
当用户双击调整大小分隔符时。默认,
NSTableView迭代表中的每一行,通过访问一个单元格
prepareCellAtRow:column :,并请求“ cellSize”来查找
适当使用的最大宽度。
对于较大的行数,将进行蒙特卡洛模拟,而不是对每一行进行插入。为了获得性能和准确的结果,它是
建议在使用大表时实施此方法。
于是我开始在网上搜寻“ Monte Carlo Simulations”。
现在,我对蒙特卡洛模拟是什么有了一个简短的了解,
但我不明白如何将其应用于这个特定问题。
我的意思是,最大内容大小完全是随机的。它不会遵循任何等式或规则,它仅基于要插入单元格中的内容,因此,蒙特卡洛方法在这里如何应用,它将如何帮助我找到合适的内容大小?
最佳答案
蒙特卡洛(Monte Carlo):不是测量列的每个像元,而是测量一组随机的像元,将发现的最大测量值视为列的最大宽度。
当然,这不会导致最大像元宽度。但这在大多数情况下可能非常接近。鉴于该方法的目的,即双击调整大小分隔符来调整列大小,该错误并不重要。如果您想要精确的值,则不要指望此方法。
你为什么要实现这样的方法btw?