添加边框到UIImages内存问题

时间:2017-12-29 07:26:40

标签: swift uikit uigraphicscontext

我试图通过在上下文中绘制边框来为我的图像添加边框,但内存不断增长。

func borderImages(image: [UIImage]) -> [UIImage] {
    let width: CGFloat = 3000
    let height: CGFloat = 3000
    var borderedImages = [UIImage]()

    for image in images {
        autoreleasepool {
            UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), true, 1.0)

            let x: CGFloat = (width - image.size.width)/2.0
            let y: CGFloat = (height - image.size.height)/2.0

            let rect = CGRect(x: x, y: y, width: image.size.width, height: image.size.height)
            image.draw(in: rect)

            if let borderedImage = UIGraphicsGetImageFromCurrentImageContext() {
                borderedImages.append(borderedImage)

            }
            UIGraphicsEndImageContext()
        }
    }

    return borderedImages
}

我尝试按照here的建议添加autoreleasepool。似乎没有任何区别。这是分配在崩溃之前的样子。enter image description here有关如何解决此问题的任何建议?我使用autoreleasepool错了吗?

1 个答案:

答案 0 :(得分:1)

因此,在讨论并查看图像之后,它看起来像是尝试立即处理100,这对于iOS设备的内存处理来说太多了。

解决方案是批处理文件以进行如下处理:

  1. 创建下一批。
  2. 以当前批次处理/上传图像。
  3. 处理当前批次。
  4. 从上面的1开始重复。
  5. 这样做你不应该一次在内存中保留太多。