核心图像和内存泄漏,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)
不要那样做。
我有问题我尝试在一些扩展名为 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)
不要那样做。