我创建了一个UIScrollView(canvas.scrollview),里面有一个自定义的UIView(画布)。
启动的正常配置是这样的:
CGRect cs2 = CGRectMake(0,0,4000,4000); CGPoint screen = {[UIScreen mainScreen] .bounds.size.width,[UIScreen mainScreen] .bounds.size.height};
self.canvas.frame = cs2; // canvas_size;
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可以完全消耗内存。知道为什么scrollview会耗尽这么多内存,有没有办法解决这个问题?
答案 0 :(得分:1)
我不认为滚动视图占用了这么多内存,而是画布自定义UIView子类。如果canvas真的是4000 x 4000,那么系统必须分配足够的内存来容纳该大小的32位深位图,或大约64 MB。对于如此大的视图,您应该将CATiledLayer用于静态内容或某种平铺视图系统。
答案 1 :(得分:1)
我在当前项目中使用巨大的滚动视图(成千上万像素),这对我来说绝对不会发生。我认为你的UIView
可能是巨大的问题,而不是你的滚动视图。尝试将UIView
的大小设置为768x1024,然后将滚动视图设置为4k x 4k并查看问题是否消失。
如果UIView
碰巧是图像(我怀疑它,或者您可能会提到它),您应该知道iOS仅支持最大1024x1024的图像,之后会有一些在内存使用方面的“未定义行为”。您可能需要查看CATiledLayer
,尽管没有内容的普通UIView不管它有多大都不会占用太多内存,所以在您的项目中也可能存在其他问题。