2009-07-30 47 views
2

在Cocoa中创建尺寸约为15000像素的视图是否明智? (当然只有一小部分视图在NSScrollView中可见)如何在Cocoa中实现非常大的滚动视图

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

如果我只是创造巨大的视图,并让NSScrollView /石英担心高效地渲染它(我的观点是在drawRect要求区域内编程绘制)还是我冒内存过度使用和其他问题? (例如,可以OS X尝试在任何时候缓存整个视图的视频内存的位图?)

回答

1

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

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

(当然,你要限制你在视图中drawRect:,否则你会浪费大量的时间做无形的图纸通过RECT做绘图。)

0

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

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

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

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

另一方面,它是我能想到的最简单的实现方法,所以我说试试看看Activity Monitor对你的内存使用情况的看法。如果它太高,请尝试更改滚动视图和剪辑视图的各种选项;如果这不起作用,我只能想出自己的滚动条和假冒它。

+0

内存使用是合理的我的机器(测试应用程序使用3MB的私人内存+ 15MB共享),但我想知道这是否仅仅是我的机器上的简单情况,或者是保证的行为(是否有任何图形卡或系统设置可能导致Cocoa缓存整个位图?) – Kornel 2009-07-30 23:41:13

+0

您永远不能依赖文档中未明确指定的实现细节。这就是说,这听起来像你应该能够继续这种方法。如果出现性能问题,您可以随时切换到其他位置,可能在用户测试中。 – 2009-07-31 03:40:41

相关问题