加载NSTableView Lazily

时间:2012-04-23 10:52:35

标签: objective-c cocoa nstableview

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

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

这种'懒惰'加载是否是一个很好的解决方案(如果可能的话)?或者也许是同样的东西?

感谢。

P.S。关于加载过程 - 我使用两种常用方法

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

-(NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView

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

我认为问题,因为你已经解释了延迟加载是自动完成的,我是从XML文件加载数据,所以解析可能占用了大量的处理时间。

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

你怎么看?谢谢!

1 个答案:

答案 0 :(得分:1)

您肯定希望将XML文件缓存到某种数据结构中。对于每个可见单元格,<{1}}方法将被称为一次。如果你有很多列,很容易看到200个单元格。向下翻页,这些单元格都发生了变化,你的XML文件加载了200次,并且你得到了延迟滚动。

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

您可以通过tableView:objectValueForTableColumn:row:返回tableView:objectValueForTableColumn:row:验证是否需要缓存,否则它将解析XML文件。一旦你做了这个改变,它是否顺利滚动,或者你有其他问题吗?这显然会使应用程序无法使用,但在实现之前,您应该始终检查优化是否必要且充分。