gpt4 book ai didi

Cocoa - 具有大量项目的 NSScrollView

转载 作者:行者123 更新时间:2023-12-03 16:47:27 25 4
gpt4 key购买 nike

我有一个 NSScrollView ,我向其中添加了一堆具有 NSImage subview 的 NSViews 。基本上它是 ScrollView 中包含的一长排缩略图。

一切都很好......直到 ScrollView 中出现数千个图像(由于没有创建单独的缩略图,因此图像很大,但缩小到缩略图大小)。

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

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

最佳答案

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

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

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

关于Cocoa - 具有大量项目的 NSScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10100917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com