2

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

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

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

4

2 回答 2

1

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

所以,答案是肯定的。继续,让你的观点随心所欲。

(当然,您需要将视图中的绘图限制为传入的矩形,drawRect:否则您将浪费大量时间进行不可见的绘图。)

于 2009-07-30T23:41:53.197 回答
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 对你的内存使用情况有什么看法。如果太高,请尝试更改滚动视图和剪辑视图的各种选项;如果这不起作用,除了制作自己的卷轴并伪造它之外,我别无他法。

于 2009-07-30T23:33:58.643 回答