ios – swift UIGraphicsGetImageFromCurrentImageContext无法释放内存

前端之家收集整理的这篇文章主要介绍了ios – swift UIGraphicsGetImageFromCurrentImageContext无法释放内存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
SWIFT代码

当我们得到一个UIView的屏幕截图时,我们通常使用这个代码

UIGraphicsBeginImageContextWithOptions(frame.size,false,scale)
drawViewHierarchyInRect(bounds,afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

问题

drawViewHierarchyInRect&&& UIGraphicsGetImageFromCurrentImageContext将在当前上下文中生成图像,但当调用UIGraphicsEndImageContext时,内存将不会释放.

内存使用继续增加,直到应用程序崩溃.

虽然有一个字UIGraphicsEndImageContext会自动调用CGContextRelease“,它不起作用.

如何释放内存drawViewHierarchyInRect或UIGraphicsGetImageFromCurrentImageContext used

要么?

有没有生成屏幕截图没有drawViewHierarchyInRect?

已经尝试过

1 Auto release : not work

var image:UIImage?
autoreleasepool{
    UIGraphicsBeginImageContextWithOptions(frame.size,scale)
    drawViewHierarchyInRect(bounds,afterScreenUpdates: true)
    image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
}
image = nil

2 UnsafeMutablePointer : not work

var image:UnsafeMutablePointer<UIImage> = UnsafeMutablePointer.alloc(1)

autoreleasepool{
   UIGraphicsBeginImageContextWithOptions(frame.size,scale)
   drawViewHierarchyInRect(bounds,afterScreenUpdates: true)
   image.initialize(UIGraphicsGetImageFromCurrentImageContext())
   UIGraphicsEndImageContext()
}
image.destroy()
image.delloc(1)

解决方法

我通过将图像操作放在另一个队列中解决了这个问题!
private func processImage(image: UIImage,size: CGSize,completion: (image: UIImage) -> Void) {
    dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.rawValue),0)) {
        UIGraphicsBeginImageContextWithOptions(size,true,0)
        image.drawInRect(CGRect(origin: CGPoint.zero,size: size))
        let tempImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        completion(image: tempImage)
    }
}

猜你在找的iOS相关文章