为什么view.layer.renderInContext()为相同大小的屏幕截图占用更多的临时内存

我正在尝试截取固定大小和固定高度的webView的截图。 networking视图可以呈现任何网站。 我注意到,取决于呈现webView.layer.renderInContext使用的临时内存的网站是更高的。 我的理解是,renderInContext首先生成位图中的屏幕截图,我认为,无论内容如何,​​截图的高度和权重都相同时,位图的大小应始终相同。 我的理解是不正确的?

截图的代码是:

autoreleasepool{ UIGraphicsBeginImageContextWithOptions(cgSizeToUse, false, 0) webView.layer.renderInContext(UIGraphicsGetCurrentContext()) image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() } 

例如:iphone6 Plus的webPage http://www.biography.com/people/ellen-page-267545的截屏宽度= 375,高度= 2000 CGFloat,占用200MB的临时内存。

iPhone 6 Plus的webPage http://en.m.wikipedia.org/wiki/Ellen_Page的屏幕截图,宽度= 375,高度= 2000 CGFloat需要80MB的临时内存。

我不是graphics方面的专家,并且想要了解为什么不同之处,并且如果有另一种方式来取代scrollView内容的屏幕截图,而不是如此内存密集。

另外,如果我能够理解为什么当前的方法内存消耗随内容而变化,这将帮助我优化我的截图代码。

UIWebView内部使用CATiledLayer来呈现网页。 取决于所呈现的网站,UIWebView创build了大量的内部子图层。 当我们尝试在Image上下文中呈现UIWebView的内容时,recursion调用会截取所有的图层。

因此,取决于UIWebView如何在内部构buildCATiledLAyer,截图代码使用的临时内存差别很大(60MB – > 200MB)