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) } }