在Cocoa中创建大小约为15000像素的视图是否明智? (当然,这个视图的一小部分一次只能在 NSScrollView 中看到)

Interface Builder的大小限制为10000像素。这是一个人为的限制还是背后有充分的理由?

我是否应该创建巨大的视图并让 NSScrollView / Quartz担心有效地呈现它(我的视图是在 drawRect 中请求的区域内以编程方式绘制的)或者我是否有过多的风险内存使用和其他问题? (例如,OS X是否可以随时尝试在视频内存中缓存整个视图的位图?)

有帮助吗?

解决方案

视图没有后备存储,除非它们是图层支持的。该窗口具有后备存储,因此用于显示视图的内存量仅限于窗口大小。

所以,答案是肯定的。来吧,让你的意见尽可能大。

(当然,你需要将你在视图中所做的绘图限制为在 drawRect:中传递的rect,否则你将浪费大量时间进行隐形绘制。)

其他提示

好吧,如果Cocoa确实尝试将整个视图缓存在内存中,那将是一个问题:

10000 * 10000 = 100,000,000
* 4 = 400,000,000

一个视图的原始RGBA像素为400 MB。如果我们想要非常悲观,假设NSView是双缓冲的,在这种情况下,你的内存使用量翻倍至800 MB。

在最糟糕的情况下,您的用户正在使用1 GB RAM的旧Mac mini上运行您的应用程序,其中您刚刚使用了80%。系统肯定会在此之前开始寻呼方式,使他们的系统变得无法忍受。

另一方面,这是我能想到的实现它的最简单方法,所以我说试试看看Activity Monitor对你的内存使用情况的看法。如果它太高,请尝试更改滚动视图和剪辑视图的各种选项;如果这不起作用,除了制作你自己的卷轴并伪造它之外别无他法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top