NSTableView 在滚动时非常滞后

Posted

技术标签:

【中文标题】NSTableView 在滚动时非常滞后【英文标题】:NSTableView is very laggy while scrolling 【发布时间】:2015-09-17 15:47:33 【问题描述】:

在我的 OS X 应用程序中,它使用 Core Data 我的表格视图在滚动时非常滞后,我只有大约 100 多行...我正在使用带有 NSArrayController 的 Cocoa 绑定来在表格中显示我的数据查看。

我只有一个具有 13 个属性的实体,但表格视图/滚动视图仍然非常滞后。

是否有一些常见的错误/错误的编码导致了这种行为?滚动时,我的 CPU 使用率约为 85%。

有人知道为什么会这样吗?我使用的是 Xcode 7 发布版。

更新:

仪器看起来像这样(我第一次使用它):

更新 2:我使用 NSVisualEffectView 并覆盖 allowVibrancy 以返回 true,因此我正在获取表视图替代行颜色,就像在我的另一个项目中一样 Github- Debter

如果我为我的视图启用核心动画层,它对滚动有很大帮助,但我的故事板开始做一些磨损的东西,我不能再处理任何与 UI 相关的东西了。

【问题讨论】:

使用 Xcode 的 Instruments 工具,您可以分析正在运行的应用程序以查看它在哪里花费时间。 我更新了我的答案并发布了 Instruments 的屏幕截图...你能从中找出什么吗? 您使用的是 CALayers ,您的 Mac 型号是什么 15" Macbook Pro Retina,2013 年初 如果您正在获取核心数据以填充表格,这可能是问题所在。是这样吗?尝试使用仪器的核心数据工具。 【参考方案1】:

如果没有看到您的 UITableView delegatedata source 的代码,很难知道确切的问题。

一些坏习惯是:

从任何UITableViewDataSource 方法或在呈现UITableViewCell 时从CoreData 加载数据。 在主线程上加载图像或在后台加载图像而不将它们缓存在本地存储中。 对tableViewCellForIndexPath 或其他数据源方法执行复杂操作(如图像处理)。

一些可能会帮助您找到问题的问题:

您使用的是NSFetchedResultsController 吗?如果您的数据集很长(尽管您提到不是),它可以提高性能。 您检查过线程数吗?如果它太高,您可能需要使用NSOperationQueue 来限制您的后台任务。

【讨论】:

我的应用程序适用于 OS X,当视图控制器确实加载和存储数据我的数组并从那里填充我的表视图时,我做了一个 fetchrequest。当我不使用 NSVisualEffectView 时,我的滚动效果很好,一切正常,但是这个 visualeffectview 会导致问题。 为我所有的UIKit 课程道歉 :)。您是否正在对每个表格视图行进行视觉效果?也许一个好主意是将整个表格视图嵌入到视觉效果视图中,然后在行上使用不透明的平面颜色来创建斑马效果。 我的整个视图都有视觉效果。现在我已经删除了它,因为那是滞后的体验。

以上是关于NSTableView 在滚动时非常滞后的主要内容,如果未能解决你的问题,请参考以下文章

下载 JSON 时如何解决 UITableView 滚动性能滞后的问题?

Flex Mobile textInput 滚动文本滞后

在 NSTableView 中滚动

Jquery - 动画滚动对角线,野生动物园不工作,镀铬滞后

颤动的重型平台代码导致UI滞后

滚动时 CollectionView 滞后