在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中并将其保存在内存中,但在需要时可以使用,这样我就可以避免在实际需要显示信息时的加载时间。
你怎么看?谢谢!答案 0 :(得分:1)
您肯定希望将XML文件缓存到某种数据结构中。对于每个可见单元格,<{1}}方法将被称为一次。如果你有很多列,很容易看到200个单元格。向下翻页,这些单元格都发生了变化,你的XML文件加载了200次,并且你得到了延迟滚动。
即使只为特定列中的每个单元格加载和解析XML文件,它也会很慢并且应该修复。
您可以通过tableView:objectValueForTableColumn:row:
返回tableView:objectValueForTableColumn:row:
验证是否需要缓存,否则它将解析XML文件。一旦你做了这个改变,它是否顺利滚动,或者你有其他问题吗?这显然会使应用程序无法使用,但在实现之前,您应该始终检查优化是否必要且充分。