2

在 iOS 上,NSTableView (UITableView) 是延迟加载的,因为表格只显示当前视图所需的单元格,而不是更多。当用户向上或向下滚动时,会从数据源加载更多信息。

OSX有类似的东西吗?我有一个 NSTableView 有 1000 多条记录要加载(+ 多列),这导致加载延迟以及向上或向下滚动时的延迟。

这种“延迟”加载会是一个好的解决方案吗(如果可能的话)?或者也许是类似的东西?

谢谢。

PS关于加载过程-我使用两种常用方法

-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

-(NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView

加载数据。其中有 if 语句来检查一些变量,因为我有 2 个包含数据的组合框,当包含“ALL”和“ALL”时会加载这 1000 多条记录。如果组合框不是“ALL”和“ALL”,则只加载几条记录,加载得很好。

鉴于您已经解释过延迟加载是自动完成的,我认为问题在于我正在从 XML 文件加载数据,因此解析可能会占用大量处理时间。

我虽然在运行时将 XML 文件中的数据加载到 NSDictionary 中,并将其保存在内存中,以便在需要时使用,这样我就可以避免实际需要显示信息时的加载时间。

你怎么看?谢谢!

4

1 回答 1

2

您肯定希望将 XML 文件缓存到某种数据结构中。该方法将为每个可见单元tableView:objectValueForTableColumn:row:调用一次。如果您有很多列,则很容易看到 200 个单元格。向下翻页,这些单元格都发生了变化,您的 XML 文件加载了 200 次,并且滚动变得迟缓。

即使只为特定列中的每个单元格加载和解析 XML 文件,它也会很慢并且应该修复。

tableView:objectValueForTableColumn:row:您可以通过返回nil它会解析 XML 文件的位置来验证缓存是否必要。进行此更改后,它滚动是否顺畅,还是有其他问题?这显然会使应用程序无法使用,但在实施之前,您应该始终检查优化是否必要和充分。

于 2012-04-24T12:19:13.197 回答