核心图像和内存泄漏,swift 3.0

Core Image and memory leak, swift 3.0

我有问题我尝试在一些扩展名为 3000x2000 的图像上使用过滤器,当我这样做时 RAM 上限和应用程序有致命错误 "didReceiveMemoryWarning"。

 func setFilters(images: [UIImage]) -> [UIImage] {
    let filter = CIFilter(name: "CIColorControls")!
    filter.setValue(2.0, forKey: kCIInputContrastKey)

    let context = CIContext(options: nil)

    var result = [UIImage]()

    for img in images {
        let newImage = autoreleasepool(invoking: { () -> UIImage in
            filter.setValue(CIImage(image: img)!, forKey: kCIInputImageKey)

            let ciImage = filter.outputImage!
            let cgImage = context.createCGImage(ciImage, from: ciImage.extent)


            return UIImage(cgImage: cgImage!, scale: img.scale, orientation: img.imageOrientation)
        })

        result.append(newImage)
    }

    return result
}

不是内存泄露;这是你实际上使用了太多的内存。导致问题的不是 CIFilter 的使用;事实上,您正试图将所有这些巨大的 UIImage 对象保存在内存中的单个数组中:

var result = [UIImage]()
// ...
result.append(newImage)

不要那样做。