我希望我的基于视图的 NSTableview 不重用以前生成的滚动超出范围的 TableCellViews。我认为 UITableView 可以通过覆盖 dequeueReusableCellWithIdentifier: 返回 nil 来实现这一点。NSTableView 有类似的解决方案吗?
-
我的背景:我有一个非常复杂的基于视图的tableView,以通常的方式绑定到ManagedObjects(即table-content、-selection 和-sortdescriptor 绑定到arraycontroller,tableCellView-elements 绑定到objectValue)。
该表大约有 20 列,但最多 400 行。滚动确实很慢,但时间分析表明不存在单一的缓慢来源(最大的单个方法调用大约需要 5% 的时间)。在没有太多性能提升的情况下缓存了我的 ManagedObject 的派生/自定义属性后,我现在尝试缓存视图(以避免在视图进入范围时频繁重新绑定 tablecellViews)。
我目前正在尝试的是不绑定表格内容,而是使用 NSDatasource 协议获取我的视图。在里面
-(NSView*) tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
如果它们存在,我想返回缓存的 TableCellViews。否则我通过创建一个新的
[self.table makeViewWithIdentifier:... owner:self];
由于 makeViewWithIdentifier 可能会返回我已经缓存的视图,因此表格内容会被错误的单元格弄乱。
这种方法的性能明显更好......
-
其他关于使滚动更高效的想法也得到了应用。