def*_*ott 7 macos cocoa nstableview
我希望我的基于视图的NSTableview不会重复使用滚动超出范围的以前生成的TableCellViews.我认为这可以通过覆盖dequeueReusableCellWithIdentifier来使用UITableView:返回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
Run Code Online (Sandbox Code Playgroud)
我想返回缓存的TableCellViews(如果它们存在).否则我会通过创建一个新的
[self.table makeViewWithIdentifier:... owner:self];
Run Code Online (Sandbox Code Playgroud)
由于makeViewWithIdentifier可能会返回已经被我缓存的视图,因此表内容会被错误的单元格搞乱.
这种方法的性能明显更好......
-
关于使滚动性能更高效的其他想法也很受欢迎.
cor*_*unn 10
在tableView:viewForTableColumn:implementation中,将返回视图上的.identifier设置为nil.这将阻止表缓存它.然后,您可以管理自己的缓存.FWIW,您甚至不必使用makeViewWithIdentifier:at; 您可以从头开始手动创建视图,而不是使用该方法(从NIB加载预设置视图).
但是,如果您遇到性能问题,最好通过查看速度慢和原因来解决这些问题.您没有提供有关它为何缓慢的信息,因此很难说该怎么做.20列是很多.尝试通过在NSTableCellView或NSTableRowView上使用canDrawSubviewsIntoLayer来减少图层数,可能会获得更好的性能.但是这样做有很多警告和注意事项.
科尔宾
| 归档时间: |
|
| 查看次数: |
2224 次 |
| 最近记录: |