UIView转Image时内存增加

问题描述 投票:0回答:1

我在

UIView
中有水平
ScrollView
和一些大尺寸图像。我想分割为特定尺寸,例如旋转木马柱。 但是,当我执行该函数时,由于内存不足,它使应用程序崩溃。我检查了一下,当我渲染预览时,它使用大量内存。 我使用以下代码从视图生成图像。

func generatePreviewImages() -> [UIImage] {
        let arrMaskView = properties.arrAllObjectView.filter({ ($0 as? MaskView) != nil }) as? [MaskView] ?? [MaskView]()
        
        arrMaskView.forEach({ $0.imageViewAddIcon.isHidden = true })
        
        var arrImage = [UIImage]()
        for i in 0..<Int(properties.cols) {
            autoreleasepool(invoking: {
                let x = (viewCanvas.frame.size.width / properties.cols.cgFloat) * CGFloat(i)
                let width = (viewCanvas.frame.size.width / properties.cols.cgFloat)
                if let image = viewCanvas.asImage(bounds: CGRect.init(x: x, y: 0, width: width, height: viewCanvas.bounds.height)) {
                    arrImage.append(image)
                }
            })
        }
        
        arrMaskView.forEach({ $0.imageViewAddIcon.isHidden = !($0.imageUser == nil) })
        
        return arrImage
}

对于从 UIView 转换的图像

func asImage(bounds:CGRect) -> UIImage? {
        let renderer = UIGraphicsImageRenderer(bounds: bounds)
        return renderer.image { rendererContext in
            layer.render(in: rendererContext.cgContext)
        }
    }
ios swift iphone image memory-leaks
1个回答
0
投票

您的代码将所有图像保存在一个数组中,这是内存压力的主要原因。图像是在内存(RAM)中创建的,这就是您在这里收到内存警告的原因。

您所能做的就是,在 for 循环中创建图像后,将创建的图像保存到磁盘内存中,即文档目录或其他位置,并将保存图像的文件 url 保存到数组中。稍后您可以从磁盘内存加载图像并可以在任何您想要的地方使用。

希望这能解决您的问题!!!

© www.soinside.com 2019 - 2024. All rights reserved.