UIScrollView似乎在大ContentSizes上使用了大量内存

问题描述:

我已经创建了一个UIScrollView(canvas.scrollview)并在其中有一个自定义的UIView(canvas)。UIScrollView似乎在大ContentSizes上使用了大量内存

用于起动一个正常的配置是这样的:

的CGRect CS2 = CGRectMake(0,0,4000,4000); CGPoint screen = {[UIScreen mainScreen] .bounds.size.width,[UIScreen mainScreen] .bounds.size.height};

self.canvas.frame = cs2; //画布的尺寸;

self.canvas.scrollView.contentSize = canvas_size.size; self.canvas.scrollView.contentOffset = CGPointMake(canvas_size.size.width/2-screen.x/2, canvas_size.size.height/2-screen.y/2);

但我注意到,当我将scrollview内容大小设置为较大的值,如4000,4000;它会使用更多的内存。例如:

scrollview view real virtual 
1000,1000 1000,1000 6 88 
4000,4000 1000,1000 62 145 
1000,1000 4000,4000 6 88 

我希望有一个相当大的工作区域,如果可能的话,但8000x8000完全foobars内存。任何想法为什么scrollview会耗尽这么多的内存,有没有办法解决这个问题?

+0

UIScrollView的contentSize不影响内存使用情况。 – drawnonward 2010-07-02 01:53:23

+0

如果这是真的,那么为什么只有当我更改contentSize时才会更改? – 2010-07-02 02:10:31

我在我当前的项目中使用了巨大的滚动视图(成千上万的像素),这对我来说绝对不会发生。我认为你的UIView是巨大的可能是问题,而不是你的滚动视图。尝试将UIView的大小设置为768x1024,然后将滚动视图上移至4k x 4k并查看问题是否消失。

如果UIView碰巧是一个图像(我怀疑它,或者你可能会提到它),你应该知道iOS只支持最大为1024x1024的图像,之后有一点“undefined行为“在内存使用方面。您可能需要查看CATiledLayer,尽管没有内容的普通UIView不应该占用太多的内存,不管它有多大,所以在您的项目的其他地方也可能存在问题。

我不认为这是使用了如此多的内存,但画布自定义UIView子类的滚动视图。如果画布真的是4000 x 4000,则系统必须分配足够的内存以容纳该大小的32位深度位图,即大约64 MB。对于这样大的视图,您应该使用CATiledLayer作为静态内容或某种平铺视图系统。