2

我有一个NSScrollView我要添加一堆的NSViews有一个NSImage子视图。基本上它是包含在滚动视图中的一长排缩略图。

一切都很好......直到滚动视图中有数千张图像(因为没有创建单独的缩略图图像,图像很大但缩小到缩略图大小)。

似乎最好的办法是释放当前未在滚动视图中显示的图像,并在它们进入视图时将它们加载回内存。支持NSView这种类型的通知(类似于iOS 上) viewWillAppear:viewWillDisappear:

此外,在 ARC 模式下,如何明确告诉操作系统卸载图像?将设置NSImage*为 nil 可以解决问题吗?

4

1 回答 1

0

我认为最好的方法是创建一个NSView拥有图像子视图的自定义子类:

  • 对您的方法进行编码drawRect:,以便仅绘制与dirtyRect相交的那些图像。
  • 将您的自定义视图嵌入为NSScrollView.
  • 随着图像的添加/删除(如果可能的话),您需要重新计算视图大小并调用[super setFrameSize:],以便滚动视图知道更改滚动条长度等。
  • setFrameSize如果您在调整视图大小时更改布局(如果您的视图中有布局的概念),则覆盖以重新布局并修改大小。

你没有在你的问题中说你面临什么问题;它们是内存还是性能(或两者兼而有之)?我不认为不断释放和重新分配子图像会帮助你。

于 2012-04-11T09:53:57.677 回答