首页 > 解决方案 > 基于单元的基于视图的 NSTableView 的内存问题

问题描述

在我的 Cocoa 项目中,我设置了一个按钮,当按下该按钮时,它会向下展开窗口框架以显示一个容器视图,其中包含一个表视图。我将各种数据(图像、文本等)从计算机加载到内存中,直到应用退出。当按下按钮并且视图变为可见时,数据被传递到表视图以进行显示。

我首先创建了基于单元的 NSTableView。当窗口折叠时(即不显示容器视图及其表视图),XCode 中的内存使用量仅为 80 MB。当我展开窗口时,它会跳到 160 MB(这是正常的)。如果我向后折叠窗口,内存使用量将降至 80 MB,并且没有内存泄漏。

然后我选择了更多的自定义并将 Cell-Based NSTableView 更改为 View-Based NSTableView。我已经加载了相同的数据,但我开始遇到内存问题。当窗口折叠时,我仍然有 80 MB 的内存使用,但当展开时,它突然跳到 260 MB+。我认为这是因为基于单元的 NSTableView 比基于视图的更轻量级,这对我来说很好。但是,当我折叠窗口时,与 Cell-Based 的 80 MB 相比,内存使用量下降到只有 240 MB。

我试图以多种方式追踪问题。我清空了从中加载 TableView 的数据源,并对其进行了强制reloadData(),但它似乎并没有清除内存问题。

看起来,互联网或 Apple 文档上没有关于它的信息。我发现最接近的是这个(不是评论,子评论),它说“基于单元的 NSTableView 是一个可视模板,它自己不存储任何数据”。

难道我做错了什么?任何帮助,将不胜感激。

标签: swiftnstableviewnstableviewcell

解决方案


推荐阅读