Cocoa - NSScrollView包含大量项目

时间:2012-04-11 06:23:53

标签: cocoa memory nsimage nsscrollview

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

您在问题中没有说明您面临的问题;他们是记忆还是表现(或两者兼而有之)?我不认为不断释放和重新分配子图像会对你有所帮助。