在Cocoa中创建大小约为15000像素的视图是否明智? (当然,NSScrollView
)
Interface Builder的大小限制为10000像素。这是一个人为的限制还是背后有充分的理由?
我是否应该创建巨大的视图并让NSScrollView
/ Quartz担心有效地呈现它(我的视图是在drawRect
中请求的区域内以编程方式绘制的),还是冒着过多的内存使用和其他问题的风险? (例如,OS X是否可以随时尝试在视频内存中缓存整个视图的位图?)
答案 0 :(得分:1)
视图没有后备存储,除非它们是图层支持的。该窗口具有后备存储,因此用于显示视图的内存量仅限于窗口大小。
所以,答案是肯定的。来吧,让你的意见尽可能大。
(当然,你需要将你在视图中所做的绘图限制为drawRect:
中传递的矩形,否则你将浪费大量时间进行隐形绘制。)
答案 1 :(得分:0)
好吧,如果Cocoa确实尝试将整个视图缓存在内存中,那将是一个问题:
10000 * 10000 = 100,000,000
* 4 = 400,000,000
一个视图的原始RGBA像素为400 MB。如果我们想要非常悲观,假设NSView是双缓冲的,在这种情况下,你的内存使用量翻倍至800 MB。
在最糟糕的情况下,您的用户正在使用1 GB RAM的旧Mac mini上运行您的应用程序 - 您刚刚使用了80%。系统肯定会在此之前开始寻呼方式,使他们的系统变得无法忍受。
另一方面,这是我能想到的实现它的最简单方法,所以我说试试看看Activity Monitor对你的内存使用情况的看法。如果它太高,请尝试更改滚动视图和剪辑视图的各种选项;如果这不起作用,除了制作你自己的卷轴并伪造它之外别无他法。