懒惰地加载 NSTableView
Posted
技术标签:
【中文标题】懒惰地加载 NSTableView【英文标题】:Loading NSTableView Lazily 【发布时间】:2012-04-23 10:52:34 【问题描述】:在 ios 上,NSTableView (UITableView) 会延迟加载,因为表格只显示当前视图所需的单元格,而不是更多。当用户向上或向下滚动时,会从数据源加载更多信息。
OSX 有类似的东西吗?我有一个 NSTableView 有 1000 多条记录要加载(+多列),这导致加载延迟以及向上或向下滚动时的延迟。
这种“延迟”加载会是一个好的解决方案(如果可能的话)吗?或者可能是类似的东西?
谢谢。
附:关于加载过程-我使用两种常用方法
-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
和
-(NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
加载数据。其中有 if 语句来检查一些变量,因为我有 2 个包含数据的组合框,当包含“ALL”和“ALL”时会加载这 1000 多条记录。如果组合框不是“ALL”和“ALL”,则只加载几条记录,加载正常。
鉴于您已经解释过延迟加载是自动完成的,我认为问题在于我正在从 XML 文件加载数据,因此解析可能会占用大量处理时间。
我虽然在运行时将 XML 文件中的数据加载到 NSDictionary 中,并将其保存在内存中,以便在需要时使用,这样我就可以避免实际需要显示信息时的加载时间。
你怎么看?谢谢!
【问题讨论】:
NSTableView
内容确实是延迟加载的。您是通过数据源还是通过绑定提供数据?如果通过数据源,请发布您对objectValueForTableColumn: row:
的实现。如果通过绑定,请查看访问器,看看它们中是否有比返回现有 ivar 更复杂的处理。
@Dondragmer 是完全正确的。 NSTableView
不会延迟加载的唯一原因是您做错了什么。我们需要有关您如何填充表格视图的更多信息。
谢谢大家!我添加了一个 P.S.提供更多信息。
【参考方案1】:
您肯定希望将您的 XML 文件缓存到某种数据结构中。 tableView:objectValueForTableColumn:row:
方法将对每个可见单元格调用一次。如果您有很多列,则很容易看到 200 个单元格。向下翻页,这些单元格都发生了变化,您的 XML 文件加载了 200 次,并且滚动变得迟缓。
即使只为特定列中的每个单元格加载和解析 XML 文件,它也会很慢并且应该修复。
您可以通过使 tableView:objectValueForTableColumn:row:
返回 nil
来验证缓存是否必要,否则它将解析 XML 文件。进行此更改后,它滚动是否顺畅,还是有其他问题?这显然会使应用程序无法使用,但在实施之前,您应该始终检查优化是否必要和充分。
【讨论】:
你能扩展一下“让单元格返回 nil”吗? 我重新措辞了我的答案。只有在您进行此更改后,有关滚动的问题才有意义。以上是关于懒惰地加载 NSTableView的主要内容,如果未能解决你的问题,请参考以下文章
懒惰地从 PostgreSQL / Cassandra 创建 Dask DataFrame